我有一个 /etc/crontab 文件。除了日常任务外,它几乎是默认文件:
'# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
00 2 * * * 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 )
因此,我希望每日任务在凌晨 2:00 执行。问题是它们在早上 7:30(有时是早上 8:30)执行。我检查了时区设置和时钟,一切正常。crontab 文件有什么问题?
答案1
按照您的配置,该命令test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
实际上将在凌晨 2:00 执行,但中的命令/etc/cron.daily
可能不会执行!
让我们更仔细地看一下该命令:
- 第一个命令
test -x /usr/sbin/anacron
检查命令是否anacron
可以执行,如果/usr/sbin/anacron
不可执行则“失败”(返回 1) - 方法
||
是:如果第一个命令失败,则执行第二个命令 - 第二条命令
( cd / && run-parts --report /etc/cron.daily )
将执行目录中的所有任务/etc/cron.daily
,而不anacron
以任何方式涉及
简而言之:仅当命令不可用时cron
才会运行任务!是一个独立的程序,它有自己的启发式方法来确定何时执行任务。/etc/cron.daily
/usr/sbin/anacron
anacron
为了让它cron
在给定的时间执行任务/etc/crontab
,只需卸载anacron
软件包!修改/etc/crontab
命令并不是一个好主意,因为中的任务/etc/cron.daily
将每天执行两次:一次由 执行cron
,一次由 执行anacron
。