Pourquoi mon travail cron a-t-il été exécuté ce mois-ci?

31

Aujourd'hui est le 1er novembre 2016 ou en chiffres (non ambigus), 2016-11-01.

J'ai un travail cron utilisateur configuré comme ceci:

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

Il est censé s'exécuter tous les deux mois le premier du mois à 3 h 33, quel que soit le jour de la semaine, mais pour une raison quelconque, il a été exécuté aujourd'hui, même si 11 n'est pas divisible par 2.

Est-ce que quelqu'un peut m'expliquer ça? Mon hypothèse de divisibilité par 2 est-elle fausse?

EDIT: J'ai oublié de mentionner, j'utilise la cronversion "3.0pl1-127 + deb8u1" sur une machine Debian 8.6 "Jessie".

comfreak
la source
2
Duplication possible de Pourquoi mon crontab ne fonctionne-t-il pas et comment puis-je le dépanner?
user9517 prend en charge GoFundMonica
Vous parlez donc du 11e jour du 2016e mois de l'année 1. :) (L'ordre des dates le plus courant en Amérique est le mois-jour-année.)
poussins du
@chicks vérifie l'historique des modifications de cette question, j'ai utilisé à l'origine le format que vous avez mentionné ;-)
comfreak
@chicks vous voulez dire mois / jour / année?
user253751
@immibis No. ... comfreak: lol
chicks

Réponses:

61

Il /ne s'agit pas d'une expression arithmétique, mais elle décrit plutôt des «valeurs de pas» sur la plage de valeurs autorisée . Ainsi, puisque les mois commencent toujours par 1au lieu de 0, /2cela signifierait «prendre toutes les autres valeurs», ce qui donne (1, 3, 5, 7, 9, 11).

Ceci est également décrit dans la page de manuel, bien que ce ne soit pas terrible, clair et facile à comprendre:

Les valeurs de pas peuvent être utilisées conjointement avec des plages. Le fait de suivre une plage avec "<numéro>" spécifie les sauts de la valeur du numéro dans la plage. Par exemple, "0-23 / 2" peut être utilisé dans le champ des heures pour spécifier l'exécution des commandes toutes les deux heures (l'alternative dans la norme V7 est "0,2,4,6,8,10,12,14,16 , 18,20,22 "). Les étapes sont également autorisées après un astérisque, donc si vous voulez dire "toutes les deux heures", utilisez simplement "* / 2".

Sven
la source
2
Merci pour votre réponse, je viens de m'en rendre compte moi-même après avoir relu la page de manuel et travaillé cela dans ma tête. Je ne travaillais généralement qu'avec des emplois cron à court terme où les chiffres commencent par 0 et mon hypothèse était en fait sens dans un sens.
comfreak
18
Je viens de penser pourquoi cette question n'est pas posée plus souvent et est arrivée à la même conclusion: parce que peu de gens exécutent des emplois avec quoi que ce soit alors un "*" dans le champ mois.
Sven
Une question, que se passerait-il si le nombre ne se divisait pas, par exemple */5? Serait-ce 1,6,11,1,6 ... ou serait-ce 1,6,11,4,9 ...? J'ai supposé que «sur la plage de valeurs autorisée» signifie qu'il n'a pas de mémoire, mais maintenant je n'en étais pas si sûr.
MariusSiuram
@MariusSiuram: La première variante. Encore une fois, ce n'est pas une opération arithmétique. crondprend simplement la liste des valeurs possibles, applique le sélecteur d'étape une fois, puis utilise ces résultats à plusieurs reprises.
Sven
4

Aujourd'hui est le premier jour de novembre.

* / 2 signifie que votre cronjob s'exécutera tous les deux mois comme vous le dites.

Ainsi, le mois prochain (décembre), le cronjob ne sera pas exécuté, mais le mois (janvier) suivant.

Le mois avant ce mois (octobre), le cronjob n'a pas été exécuté. Mais en septembre, c'était le cas.

Orphelins
la source
1
Donc, vous estimez que */2dans le champ mois est équivalent à 1-11/2, plutôt que 2-12/2. Je ne dis pas que vous vous trompez, mais pouvez-vous produire des pièces justificatives?
MadHatter prend en charge Monica
@MadHatter Sven l'a bien expliqué.
Orphelins
1
Je suis d'accord et, surtout, il a cité des sources faisant autorité.
MadHatter prend en charge Monica
2
Juste pour souligner, septembre précède octobre, et non août ;-)
hjpotter92