任务被漏定时任务执行
2. anacron
的监测周期
anacron
会使用一天、七天、一个月作为监测周期。- 在系统的
/var/spool/anacron/
目录中存在cron.{daily,weekly,monthly}
文件,用于记录上次执行 cron 的时间。 - 将记录的时间与当前时间作比较,若两个时间差超过了 anacron 的指定时间差值,证明有cron任务被漏执行。
3. /etc/anacrontab
文件
[vagrant/etc] ]$cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
# These replace cron's entries
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly
对比 /etc/crontab
返回查看 /etc/crontab
文件中有这样一段:
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
test -x
test -x /usr/sbin/anacron
表示 “检测文件/usr/sbin/anacron
是否存在且具有“可执行”权限”若
test -x /usr/sbin/anacron
为 true,则不执行||
后面的命令,若为 false,则执行||
后面的命令。即,判断系统是否安装了
anacron
, 若安装了,则忽略/etc/crontab
中的这三条定时任务,改为使用/etc/anacrontab
中的配置。run-parts --report
遍历目标文件夹,执行第一层目录下具有可执行权限的文件。
/etc/anacrontab
计划任务格式
天数 | 延迟时间(分) | 工作名称 | 实际执行的命令 |
---|---|---|---|
1 | 5 | cron.daily | run-parts --report /etc/cron.daily |
7 | 10 | cron.weekly | run-parts --report /etc/cron.weekly |
@monthly | 15 | cron.monthly | run-parts --report /etc/cron.monthly |
以 cron.daily 为例说明 anacron 执行过程
- 从
/etc/anacrontab
分析到 cron.daily 的天数为 1 天。 - 从
/var/spool/anacron/cron.daily
中获取最后一次执行 anacron 的时间。 - 将上面获取的时间与当前时间做对比,若相差时间为1天以上(含一天),就准备执行 cron.daily
- 根据
/etc/anacrontab
的设置,将延迟5分钟执行 cron.daily。 - 5分钟后,开始执行
run-parts --report /etc/cron.daily
命令,即执行/etc/cron.daily
目录下的所有可执行文件。