为什么我的 cron 作业本月运行?

为什么我的 cron 作业本月运行?

今天是 2016 年 11 月 1 日,或者用(明确的)数字表示,2016-11-01。

我有一个如下设置的用户 cron 作业:

# m h  dom mon dow   command
33  3   1  */2  *    /home/user/...

它应该每隔一个月的第一天凌晨 3:33 运行一次,无论是星期几,但由于某种原因,它今天运行了,尽管 11 不能被 2 整除。

有人能解释一下吗?我对 2 的整除性的假设是错误的吗?

编辑:我忘了提一下,我cron在 Debian 8.6“Jessie”机器上运行版本“3.0pl1-127+deb8u1”。

答案1

不是/一个算术表达式,而是描述的“步长值”。允许值的范围。因此,由于月份总是以1而不是开头0,因此/2意味着“取其他每个值”,结果为 (1, 3, 5, 7, 9, 11)。

手册页中也对此进行了描述,尽管这并不那么清晰易懂:

步长值可以与范围结合使用。范围后面跟有“<number>”表示跳过该范围内的数字值。例如,可以在小时字段中使用“0-23/2”来指定每隔一小时执行一次命令(V7 标准中的替代方案是“0,2,4,6,8,10,12,14,16,18,20,22”)。星号后面也可以使用步长,因此如果您想表示“每两小时”,只需使用“*/2”即可。

答案2

今天是十一月的第一天。

*/2 表示你的 cronjob 将按照你所说的每隔一个月执行一次。

因此下个月(12 月) cronjob 将不会执行,但再下个月(1 月)将会执行。

这个月之前的一个月(十月)cronjob 没有被执行。但是九月份它被执行了。

相关内容