我无法理解 geeksforgeeks crontab 页面中的以下 cronjob:
30 08 10 06 * /home/maverick/full-backup
我知道它在 6 月 10 日上午 8:30 执行,但最后一个 * 让我失望。这是说它将在 6 月 10 日这一周的每一天执行吗?或者一周中的那一天是未知的,因此,* 表示无论最终是哪一天,顺其自然。
有人可以澄清吗
答案1
一般来说,*
工作日列中的 表示星期几与该作业的调度无关。该工作将于每年的6月10日执行。如果你做过如果有星期几条目(例如“星期三”),则该作业将在 6 月 10 日以及 6 月的每个星期三进行。man 5 crontab
无论您在哪个系统上安排工作,最好咨询一下,因为cron
实现可能会有所不同。
此外,手册页可能含糊不清或难以阅读,例如:
当分钟、小时和月份字段与当前时间匹配,并且两个日期字段(每月的某一天或每周的某一天)中至少有一个与当前时间匹配时,由 cron(8) 执行命令(请参阅下文“注意”)。
和:
注意:命令执行的日期可以由两个字段指定 - 月份中的某一天和星期几。如果两个字段都受到限制(即不是 *),则当任一字段与当前时间匹配时将运行该命令。例如,
30 4 1,15 * 5
将导致命令在每月 1 日和 15 日以及每个星期五的凌晨 4:30 运行。
IMO,有点不幸的是,“当两个字段都受到限制时”,该限制实际上是较少的与一个字段受限制而另一字段为通配符时相比,具有限制性。
比较:
30 08 10 06 * /home/maverick/full-backup
上述作业仅在 6 月 10 日执行。
30 08 * 6 Wed /home/maverick/full-backup
上述作业将在六月份的每周三执行。
30 08 10 06 Wed /home/maverick/full-backup
上述作业将在 6 月的每周三以及 6 月 10 日执行。