以前用 Debian 的时候,如果计算机不是 24 小时开机,那么一定要装上 anacron,否则像 updatedb 可能经常不会执行。换用 Gentoo 以后发现不用 anacron 也可以保证它们的执行,都是 vixie-cron,为啥 Gentoo 就能做到呢?今天看了一下 /etc/crontab,弄明白了:
# for vixie cron
#
# $Header: /var/cvsroot/gentoo-x86/sys-process/vixie-cron/files/crontab-3.0.1-r4,v 1.1 2005/03/04 23:59:48 ciaranm Exp $
#
#
# Global variables
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# check scripts in cron.hourly, cron.daily, cron.weekly and cron.monthly
0 * * * * root rm -f /var/spool/cron/lastrun/cron.hourly
1 3 * * * root rm -f /var/spool/cron/lastrun/cron.daily
15 4 * * 6 root rm -f /var/spool/cron/lastrun/cron.weekly
30 5 1 * * root rm -f /var/spool/cron/lastrun/cron.monthly
*/10 * * * * root test -x /usr/sbin/run-crons && /usr/sbin/run-crons
任何最后一次执行的时间被写入 /var/spoll/cron/lastrun 下面的文件里,脚本 /usr/sbin/run-crons 负责读取这些文件,判断什么时候应该执行它们。
当然瑕疵还是有的,比如如果今天晚上执行了 cron.daily,12 点如果没关机,马上再执行一次;但如果 12 点之前关机了,明天就要等到今天执行的相同时间再执行。不过,这点问题不算什么,通常情况下无所谓,所以我现在不用 anacron 了。
反而倒是如果同时安装了 vixie-cron 和 anacron,脚本会重复执行,一会儿去 bugs.gentoo.org 看看有人报过没。(作者:超越数)