为什么我的 cron 工作在这个月运行?

com*_*eak 31 cron

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

我有一个像这样设置的用户 cron 作业:

# m h  dom mon dow   command
33  3   1  */2  *    /home/user/...
Run Code Online (Sandbox Code Playgroud)

它应该在每个月的第一天凌晨 3:33 每隔一个月运行一次,无论那是一周中的哪一天,但由于某种原因,它今天运行,即使 11 不能被 2 整除。

有人可以向我解释这个吗?我对可被 2 整除的假设是错误的吗?

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

Sve*_*ven 61

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

这也在手册页中进行了描述,尽管这并不可怕,而且易于理解:

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

  • 我只是想为什么不经常问这个问题并得出了相同的结论:因为很少有人在月份字段中运行带有“*”的工作。 (18认同)
  • 感谢您的回答,在再次阅读手册页并在我的脑海中完成后,我自己才意识到这一点。我通常只处理短期的 cron 工作,其中数字以 0 开头,而我的假设实际上在某种程度上是有道理的。 (2认同)