Cron定时任务
定时任务
本例为 CentOS 7 系统
系统定时执行目录执行时间
/etc/anacrontab
1 | |
在这个文件中,“RANDOM_DELAY” 定义的是最大随机延迟,也就是说,cron.daily 工作如果超过 1 天没有执行,则并不会马上执行,而是先延迟强制延迟时间,再延迟随机延迟时间,之后再执行命令;“START_HOURS_RANGE” 的是定义 anacron 执行时间范围,anacron 只会在这个时间范围内执行。delay in minutes 表示强制延迟。
对于 cron.hourly,进入 /etc/cron.d/0hourly 中查看:
1 | |
所以,首先 cron.hourly 里的脚本是每小时第 1 分钟执行;
crond 会检查 /etc/cron.d 里面的配置,里面有一个 0hourly 文件,每小时去运行一次 /etc/cron.hourly 目录,该目录下面有一个 0anacron 文件,这样 0anacron 文件就能每小时运行一次,这里其实执行的是 /usr/sbin/anacron -s 。anacron 读取配置文件 /etc/anacrontab,将当前时间与 /var/spool/anacron 目录下面的文件里面的时间戳作对比,如果需要则去运行 /etc/anacrontab 对应的条目。
参考:
https://www.sidney-tan.com/linuxuse/474.html
脚本放在 /etc/cron.daily 中不执行的原因
脚本要有执行权限:
1 | |
如:chmod 755 delete-log
测试方法
定时任务写完后,需要验证一下有没有达到你想要的效果
编辑脚本文件放在指定目录,这里先放在 cron.daily、cron.hourly 等目录下,方便修改好直接适配需求。
可以先手动 run-parts 脚本所在目录,run-parts /etc/cron.daily,然后
1 | |
查看日志中是否有对应脚本文件执行的记录。
有正常执行的记录,就可以测定时任务是否有效了,按道理来说有两种方法测试:
编辑 cron 配置文件(作业列表),
1
crontab -e按自己需要的时间
run-parts脚本所在目录,如:1
2# 每天14点47分执行cron.daily内的脚本
47 14 * * * root run-parts /etc/cron.daily修改控制目录下脚本执行时间的文件 /etc/anacrontab:
修改 START_HOURS_RANGE,delay in minutes 和 RANDOM_DELAY 为自己需要的时间,进行测试。
但不推荐改动系统设置。
grep 命令多条件查询
https://www.codeleading.com/article/97822101577/
特殊处理
自定义定时执行任务时,排查完各种问题,如文件执行权限,命令书写,执行时间检查等,crontab -e 中写的定时任务依然不生效,可在 /etc/crontab 中测试定时任务。