为什么这个 cron 作业会运行?

Com*_*hip 4 cron

我有一个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
Run Code Online (Sandbox Code Playgroud)

我用一个简单echo的调试/演示目的替换了实际命令。对于特殊情况,我添加了一些工作,例如

26 07 19-24 DEC ? (echo 1 `date` ) >> /var/log/cron.www-data 2>&1
Run Code Online (Sandbox Code Playgroud)

这实际上工作正常。

问题是,上面的第二行 ( echo 6) 刚刚运行,今天 12 月 19 日——日志文件显示

6 Tue Dec 19 16:00:01 CET 2017
Run Code Online (Sandbox Code Playgroud)

我想我的问题很简单:为什么要运行这项工作

我正在 Raspberry Pi 上运行 Linux 3.18.11-v7+ #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU/Linux。

mjt*_*ner 5

原因可以在crontab(5)

当分钟、小时和月份字段与当前时间匹配时,并且当两个日期字段(月份中的某一天或一周中的某一天)中的至少一个与当前时间匹配时,cron(8) 会执行命令。

强调

我相信您希望脚本在 12 月 1 日至 18 日的指定时间运行,但仅限于周一至周四。正如您从手册页中看到的cron那样,当您同时指定月份中的某天和一周中的某天时,不会执行此操作。你的命令将执行每天1-18个月,并从周一12月份任何一天至周四。2017 年 12 月 19 日是星期二,因此脚本正在运行。

注意:以上适用于 ISC cron,这是 Debian 系统上的默认值。