我有一个cron
脚本,全年每天都会运行几次。然而,圣诞节前后,情况应该会有所不同。所以我的脚本基本上是这样的:
# m h dom mon dow command
26 16 * JAN-NOV MON-THU (echo 14 `date`) >> /var/log/cron.www-data 2>&1
26 16 1-18 DEC MON-THU (echo 6 `date`) >> /var/log/cron.www-data 2>&1
我用一个简单的命令替换了实际的命令,echo
以用于调试/演示目的。对于特殊情况,我添加了一些工作,例如
26 07 19-24 DEC ? (echo 1 `date` ) >> /var/log/cron.www-data 2>&1
实际上工作得很好。
问题是,上面的第二行 ( echo 6
) 刚刚运行,今天 12 月 19 日——日志文件显示
6 Tue Dec 19 16:00:01 CET 2017
我想我的问题很简单:为什么这个作业运行?
我在 Raspberry Pi 上运行 Linux 3.18.11-v7+ #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU/Linux。
答案1
原因可以在crontab(5)
:
当分钟、小时和月份字段与当前时间匹配时,由 cron(8) 执行命令,并且当两个日期字段(一个月中的某一天或一周中的某一天)中至少有一个与当前时间匹配时。
(添加了强调)
我相信您希望脚本在 12 月 1 日至 18 日的指定时间运行,但仅限周一至周四。正如您从手册页中看到的,cron
当您指定月份中的某一天和星期几时,不会执行此操作。您的命令将在 12 月 1 日至 18 日期间的每一天执行和十二月星期一至星期四的任何一天。 2017 年 12 月 19 日是星期二,因此脚本运行。
笔记:以上适用于 ISC cron,Debian 系统上的默认设置。