Por que meu trabalho do cron foi executado este mês?

31

Hoje é 1º de novembro de 2016 ou em números (sem ambiguidade) de 2016-11-01.

Eu tenho uma tarefa cron do usuário configurada assim:

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

É esperado que seja executado a cada dois meses no primeiro dia do mês às 3h33, não importando o dia da semana, mas por alguma razão ele foi executado hoje, mesmo que 11 não seja divisível por 2.

Alguém pode me explicar isso? Minha suposição de divisibilidade é 2 errada?

EDIT: Esqueci de mencionar, estou executando cron versão "3.0pl1-127 + deb8u1" em uma máquina Debian 8.6 "Jessie".

    
por comfreak 01.11.2016 / 12:47

2 respostas

61

O / não é uma expressão aritmética, em vez disso, descreve "valores de etapa" sobre o intervalo de valores permitido . Portanto, como os meses sempre começam com 1 em vez de 0 , /2 significaria "pegar todos os outros valores", resultando em (1, 3, 5, 7, 9, 11).

Isso também é descrito na página de manual, embora isso não seja terrível, claro e fácil de entender:

Step values can be used in conjunction with ranges. Following a range with "<number>" specifies skips of the number’s value through the range. For example, "0-23/2" can be used in the hours field to specify command execution every other hour (the alternative in the V7 standard is "0,2,4,6,8,10,12,14,16,18,20,22"). Steps are also permitted after an asterisk, so if you want to say "every two hours", just use "*/2".

    
por 01.11.2016 / 13:09
4

Hoje é o primeiro dia de novembro.

* / 2 significa que o seu cronjob será executado a cada dois meses, como você diz.

Assim, no mês que vem (dezembro), o cronjob não será executado, mas o mês (janeiro) depois será.

No mês anterior a este mês (outubro), o cronjob não foi executado. Mas em setembro foi.

    
por 01.11.2016 / 12:57