今日上午,生产环境怀疑某个cron定时任务没有执行,所以需要分析日志,详细过程如下,记录只为以后工作更加效率,笔者小白,请大神指点。
普及知识:
cron是一种机制,crontab是指令
它可以让系统在指定的时间,去执行某个指定的工作,我们可以使用crontab指令来管理cron机制
1.取一段时间日志
语法:sed -n ‘/开始时间/,/结束时间/p‘ filename
sed -n ‘/Sep 20 08:50:*/,/Sep 20 09:50:*/p‘ /var/log/cron >seq20_cron.log
2.过滤关键字 (也可以与上面结合一条命令搞定-这里为了步骤)
语法:grep –nr “关键字” filename
grep -nr "seq20_cron.log" > seq20.log
1.3 将过滤数据去重-统计次数-并排序
[[email protected] ~]# cat seq20.log |sort|uniq -c|sort -r 63/****/webs/****cbeta/artisan 62https://www.*****.cn/TimeTask/ 62https://www.*****.cn/TimeTask/ 62https://www.*****.cn/TimeTask/ 62 https://www.*****.cn/TimeTask/ 62https://www.*****.cn/TimeTask 62https://www.*****.cn/TimeTask/ 62 https://www.*****.cn/TimeTask/ ……省略若干
如果先 sort 的话,就会把所有重复的数据行变成相邻的数据行,再 uniq 的话,就去掉所有重复的数据行了。
参数介绍
-c, --count ##在每行前加上表示相应行目出现次数的前缀编号 -D, --all-repeated ##只输出重复的行,不过有几行输出几行 -i, --ignore-case ##不区分大小写 -s, --skip-chars=N //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符 -u, --unique ##去除重复的后,全部显示出来,根mysql的distinct功能上有点像 -z, --zero-terminated endlines with 0 byte, not newline -w, --check-chars=N ##对每行第N个字符以后的内容不作对照 --help ##显示此帮助信息并退出 --version //显示版本信息并退出
1.4 筛选日志,确定任务执行结果 (时间段 当天的8点50-9点50)
将筛选出的日志文件,与原数据文件做对比,得出最后结论
结论:
1)关于 www.****.cn站点 定时任务共计:35条 8条被注销 27条在执行
2)27条中7条没有执行,但可以忽略,因为定时任务设定时间,不在范围内
0 */6 * * * /usr/bin/curl https://www.*****.cn/ 0 11 * * * /usr/bin/curl ##省略。。。
3)剩余20个定时任务,都已执行
##以上内容,也可用于普通ddos攻击,配置筛选日志,在自动建立iptables规则,自动封杀恶意访问IP
时间: 2024-10-13 12:49:52