为什么我的Cron工作本月开始运行?


31

今天是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”。



因此,您正在谈论的是第一年的2016年1月的第11天。:)(美国最常见的日期顺序是月-日-年。)
小鸡

@chicks检查此问题的编辑历史记录,我最初使用的是您提到的格式;-)
comfreak

@小鸡,您是指月/日/年?
user253751 '16

@immibis No. ... comfreak:大声笑
小鸡

Answers:


61

/不是一个算术表达式,而不是它描述在“步长值” 允许值的范围内。所以,既然几个月总是以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
谢谢您的回答,我在再次阅读了手册页并在脑海中反复学习后才意识到这一点。我通常只从事短期的cron作业,其中数字以0开头,而我的假设实际上在某种程度上是合理的。
comfreak

18
我只是在想为什么不经常问这个问题并得出相同的结论:因为很少有人在月份字段中以“ *”开头的东西来做工作。
斯文

一个问题,如果数字不除,将会发生什么*/5?是1,6,11,1,6 ...还是1,6,11,4,9 ...?我认为“超出允许的值范围”意味着它没有内存,但是现在我不太确定。
MariusSiuram '16

@MariusSiuram:第一个变种。同样,这不是算术运算。crond仅获取可能值的列表,一次应用步骤选择器,然后重复使用这些结果。
斯文

4

今天是十一月的第一天。

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

因此,下个月(十二月)将不会执行cronjob,但是它将在下个月(一月)执行。

本月(十月)的前一个月未执行cronjob。但是在九月。


1
因此,您认为*/2在month字段等于1-11/2,而不是2-12/2。我并不是说您错了,但是您可以提供任何支持文档吗?
MadHatter在2013年

@MadHatter Sven的解释很好。
孤儿们

1
我同意,最重要的是他引用了权威消息。
MadHatter在2013年

2
只是指出,9月先于10月,而不是8月;-)
hjpotter92 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.