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.