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


31

Hoje é 1º de novembro de 2016 ou em números (não ambíguos), 01/11/2016.

Eu tenho um trabalho cron do usuário configurado assim:

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

Ele deve ser executado a cada dois meses no primeiro dia do mês às 3:33 da manhã, independentemente do dia da semana, mas por algum motivo foi executado hoje, mesmo que 11 não seja divisível por 2.

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

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



Então você está falando do 11º dia do mês 2016 do ano 1. :) (A ordem mais data comum nos Estados Unidos é mês-dia-ano.)
pintos

@chicks verificar o histórico de edições desta questão, eu originalmente usado o formato que você mencionou ;-)
comfreak

@chicks você quer dizer mês / dia / ano?
precisa saber é o seguinte

@immibis No. ... comfreak: lol
pintainhos

Respostas:


61

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

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

Os valores das etapas podem ser usados ​​em conjunto com os intervalos. Seguir um intervalo com "<número>" especifica pulos do valor do número no intervalo. Por exemplo, "0-23 / 2" pode ser usado no campo horas para especificar a execução do comando a cada duas horas (a alternativa no padrão V7 é "0,2,4,6,8,10,12,14,16 18,20,22 "). As etapas também são permitidas após um asterisco; portanto, se você quiser dizer "a cada duas horas", use "* / 2".


2
Obrigado pela sua resposta, eu mesmo percebi isso depois de ler a página de manual novamente e trabalhar com isso na minha cabeça. Normalmente, eu trabalhava apenas com tarefas cron de curto prazo, onde os números começam com 0 e minha suposição fazia sentido.
Comfreak #

18
Apenas pensei em por que essa pergunta não é feita com mais frequência e cheguei à mesma conclusão: porque poucas pessoas executam trabalhos com algo além de um "*" no campo do mês.
Sven

Uma pergunta, o que aconteceria se o número não se dividir, por exemplo */5? Seria 1,6,11,1,6 ... ou seria 1,6,11,4,9 ...? Eu assumi que "acima do intervalo permitido de valores" significa que ele não tem memória, mas agora eu não estava tão certo disso.
MariusSiuram #

@MariusSiuram: a primeira variante. Novamente, esta não é uma operação aritmética. crondapenas pega a lista de valores possíveis, aplica o seletor de etapas uma vez e, em seguida, usa esses resultados repetidamente.
Sven

4

Hoje é o primeiro dia de novembro.

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

Portanto, no próximo mês (dezembro) o cronjob não será executado, mas no mês (janeiro) após.

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


11
Então você acha que */2no campo mês é equivalente a 1-11/2, e não 2-12/2. Não estou dizendo que você está errado, mas você pode produzir alguma documentação de suporte?
MadHatter suporta Monica

@ MadHatter Sven explicou bem isso.
Órfãos

11
Concordo, e o melhor de tudo é que ele citou fontes autorizadas.
MadHatter apoia Monica

2
Apenas indicando, Setembro precede outubro, e não agosto ;-)
hjpotter92
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.