Answers:
即使特雷弗(Frevor)是正确的,我还是在这里给出一个替代答案。
cron @weekly
关键字的功能与他提到的完全相同。但是,大多数发行版用于run-parts
运行自己的预定crontab文件(每小时,每天,每周和每月一次),这些文件不使用cron的关键字。
例如,Ubuntu有一个/etc/cron.weekly
,其中每个cronjob都包含一个单独的文件。
这通常在 /etc/crontab
Ubuntu的karmic 9.10发行版包含以下内容: /etc/crontab
17 * * * * root cd / && run-parts --report /etc/cron.hourly
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 )
因此,Ubuntu中的每周crontab于周日上午6.47运行
注意:在查找crontab实现的手册页时,您想使用man 5 crontab
而不是man crontab
。后者只会为您提供crontab命令的语法。前者为您提供了crontab实现细节。
So the weekly crontab in Ubuntu is run at 6.47am on Sunday
。这是不正确的,因为test -x /usr/sbin/anacron ||
命令的一部分说||
如果“ / usr / sbin / anacron”是不可执行的或不存在的,则仅运行右边的东西,但是它确实存在,因此run-parts
将不会实际运行cron
!相反,anacron
必须处理它,对吗?“ / etc / anacrontab”中的Aanacron表每周显示一次:7 10 cron.weekly run-parts --report /etc/cron.weekly
,这意味着每周作业每7天运行一次,但延迟10分钟。
@weekly等效于:0 0 * * 0
因此它将在星期日的00:00运行。
答案在于crontab本身的联机帮助页(man 5 crontab
):
支持以下特殊的时间规范“昵称”,它们替换了5个初始时间和日期字段,并以'@'字符作为前缀:
@reboot : Run once after reboot. @yearly : Run once a year, ie. "0 0 1 1 *". @annually : Run once a year, ie. "0 0 1 1 *". @monthly : Run once a month, ie. "0 0 1 * *". @weekly : Run once a week, ie. "0 0 * * 0". @daily : Run once a day, ie. "0 0 * * *". @hourly : Run once an hour, ie. "0 * * * *".
因此,它0 0 * * 0
是00:00(在任何月份的任何日期),只要它是星期日(工作日0)。