这是已安装的 Gentoo 系统上的系统 crontab cronie
,并anacron
启用了使用标志:
59 * * * * root [ ! -x /etc/cron.hourly/0anacron ] && rm -f /var/spool/cron/lastrun/cron.hourly
9 3 * * * root [ ! -x /etc/cron.hourly/0anacron ] && rm -f /var/spool/cron/lastrun/cron.daily
19 4 * * 6 root [ ! -x /etc/cron.hourly/0anacron ] && rm -f /var/spool/cron/lastrun/cron.weekly
29 5 1 * * root [ ! -x /etc/cron.hourly/0anacron ] && rm -f /var/spool/cron/lastrun/cron.monthly
*/10 * * * * root [ ! -x /etc/cron.hourly/0anacron ] && { test -x /usr/sbin/run-crons && /usr/sbin/run-crons ; }
它确保/etc/cron.hourly/0anacron
在运行任何内容之前不存在,因为 anacron 将执行 cron.* 脚本。它是:
# ls -la /etc/cron.hourly/0anacron
-rwxr-x--- 1 root root 448 May 11 23:46 /etc/cron.hourly/0anacron
好的,那么 anacron 如何运行?它的辅助脚本位于 cron.hourly 中,但如果辅助脚本存在,则 cron.hourly 中的任何内容都不会执行。
我找不到任何证据证明它曾经运行过。这是一个先有鸡还是先有蛋的问题。
答案1
据我所知,cronie 的 anacron 是由 cron 通过执行 触发的/etc/cron.hourly/0anacron
。但由于 crontab 中的第 1 行和第 5 行(仅在 0anacron 不可执行的情况下运行),这种情况永远不会发生。
我通过更改/etc/crontab
为以下内容解决了这个问题
59 * * * * root run-parts /etc/cron.hourly
#59 * * * * root [ ! -x /etc/cron.hourly/0anacron ] && rm -f /var/spool/cron/lastrun/cron.hourly
#9 3 * * * root [ ! -x /etc/cron.hourly/0anacron ] && rm -f /var/spool/cron/lastrun/cron.daily
#19 4 * * 6 root [ ! -x /etc/cron.hourly/0anacron ] && rm -f /var/spool/cron/lastrun/cron.weekly
#29 5 1 * * root [ ! -x /etc/cron.hourly/0anacron ] && rm -f /var/spool/cron/lastrun/cron.monthly
#*/10 * * * * root [ ! -x /etc/cron.hourly/0anacron ] && { test -x /usr/sbin/run-crons && /usr/sbin/run-crons ; }
第 1 行确保中的脚本/etc/cron.hourly
每小时由常规 cron 执行一次(不检查 lastrun 文件)。
我评论删除了每日、每周和每月的 lastrun 文件,因为它们是通过 anacron 运行的(在 中定义/etc/anacrontab
)。