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

为什么这个 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

我用一个简单的命令替换了实际的命令,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 系统上的默认设置。

相关内容