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


Nous sommes le 1er novembre 2016 ou en chiffres (non ambigus) le 2016-11-01.

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

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

Il est supposé fonctionner tous les deux mois le premier du mois à 3h33, peu importe 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? Est-ce que mon hypothèse de divisibilité par 2 est fausse?

EDIT: J'ai oublié de mentionner, je cours cron version "3.0pl1-127 + deb8u1" sur une machine Debian 8.6 "Jessie".


31
2017-11-01 11:47


origine


Double possible de Pourquoi ma crontab ne fonctionne-t-elle pas et comment puis-je la résoudre? - Iain
Vous parlez donc du 11ème jour du 2016ème mois de l'année 1. :) (L'ordre de date le plus courant en Amérique est mois-jour-année.) - chicks
@chicks vérifie l'historique des modifications de cette question, j'ai initialement utilisé le format que vous avez mentionné ;-) - comfreak
@ vous voulez dire mois / jour / année? - immibis
@immibis No. ... comfreak: lol - chicks


Réponses:


le / n’est pas une expression arithmétique, il décrit plutôt des "valeurs de pas" sur le permis gamme de valeurs. Donc, puisque les mois commencent toujours par 1 au lieu de 0, /2 signifierait "prendre toutes les autres valeurs", résultant en (1, 3, 5, 7, 9, 11).

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

Les valeurs de pas peuvent être utilisées conjointement avec des plages. Suivre une plage avec "<nombre>" spécifie les sauts de la valeur du nombre à travers la plage. Pour          Par exemple, "0-23 / 2" peut être utilisé dans le champ des heures pour spécifier l'exécution de la commande toutes les 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".


61
2017-11-01 12:09



Merci pour votre réponse, je viens de m'en rendre compte moi-même après avoir relu la page de manuel et l'avoir étudié dans ma tête. Je travaillais habituellement uniquement avec des emplois cron à court terme, où les chiffres commençaient par 0 et mon hypothèse était en fait logique. - comfreak
J'ai juste réfléchi à la raison pour laquelle cette question n'est pas posée plus souvent et je suis arrivé à la même conclusion: parce que peu de personnes occupent des emplois avec un "*" dans le champ des mois. - Sven♦
Une question, que se passerait-il si le nombre ne se divisait pas, par exemple */5? S'agirait-il de 1,6,11,1,6 ... ou de 1,6,11,4,9 ...? J'ai supposé que "sur la plage de valeurs autorisée" signifiait qu'il n'avait 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. crond prend seulement la liste des valeurs possibles, applique le sélecteur d'étape une fois, puis utilise ces résultats à plusieurs reprises. - Sven♦


Aujourd'hui est le premier jour de novembre.

* / 2 signifie que votre cronjob sera exécuté tous les deux mois, comme vous le dites.

Donc, le mois prochain (décembre), le travail de cron ne sera pas exécuté, mais le mois (janvier) qui suivra.

Le mois précédent ce mois d’octobre (octobre), le travail à la tâche n’a pas été exécuté. Mais en septembre c'était.


4
2017-11-01 11:57



Donc vous pensez que */2 dans le champ mois est équivalent à 1-11/2, plutôt que 2-12/2. Je ne dis pas que vous avez tort, mais pouvez-vous produire des pièces justificatives? - MadHatter
@MadHatter Sven l'a bien expliqué. - Orphans
Je suis d'accord, et le meilleur de tous, il a cité des sources faisant autorité. - MadHatter
Il suffit de signaler que septembre précède octobre et non août ;-) - hjpotter92
@ hjpotter92 haha ​​merci! - Orphans