Warum lief mein Cron Job diesen Monat?

31

Heute ist der 1. November 2016 oder in (eindeutigen) Ziffern der 01.11.2016.

Ich habe einen Benutzer-Cron-Job wie folgt eingerichtet:

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

Es soll jeden zweiten Monat am Ersten des Monats um 03:33 Uhr ausgeführt werden, egal an welchem ​​Wochentag es ist, aber aus irgendeinem Grund wurde es heute ausgeführt, obwohl 11 nicht durch 2 teilbar ist.

Kann mir das jemand erklären? Ist meine Annahme der Teilbarkeit durch 2 falsch?

BEARBEITEN: Ich habe vergessen zu erwähnen, dass ich die cronVersion "3.0pl1-127 + deb8u1" auf einem Debian 8.6 "Jessie" Rechner laufen lasse.

comfreak
quelle
2
Mögliches Duplikat von Warum funktioniert meine Crontab nicht und wie kann ich das Problem beheben?
user9517 unterstützt GoFundMonica
Sie sprechen also vom 11. Tag des 2016. Monats des Jahres 1. :) (Die häufigste Datumsreihenfolge in Amerika ist Monat-Tag-Jahr.)
Küken
@ Küken überprüfen Sie den Bearbeitungsverlauf dieser Frage, ich habe ursprünglich das von Ihnen erwähnte Format verwendet
;-)
@chicks meinst du Monat / Tag / Jahr?
user253751
@immibis Nr. ... comfreak: lol
Küken

Antworten:

61

Das /ist kein arithmetischer Ausdruck, sondern beschreibt "Schrittwerte" über den zulässigen Wertebereich. Also, da Monate immer mit 1anstatt beginnen 0, /2würde bedeuten "jeden anderen Wert nehmen", was zu (1, 3, 5, 7, 9, 11) führt.

Dies wird auch in der Handbuchseite beschrieben, obwohl dies nicht sehr klar und leicht zu verstehen ist:

Schrittwerte können in Verbindung mit Bereichen verwendet werden. Das Folgen eines Bereichs mit "<number>" legt fest, dass der Wert der Zahl im Bereich übersprungen wird. Zum Beispiel kann "0-23 / 2" im Stundenfeld verwendet werden, um die Befehlsausführung jede zweite Stunde anzugeben (die Alternative im V7-Standard ist "0,2,4,6,8,10,12,14,16" 18, 20, 22 "). Schritte sind auch nach einem Sternchen zulässig. Wenn Sie also "alle zwei Stunden" sagen möchten, verwenden Sie einfach "* / 2".

Sven
quelle
2
Vielen Dank für Ihre Antwort, das habe ich erst selbst gemerkt, nachdem ich die Manpage noch einmal gelesen und in meinem Kopf durchgearbeitet habe. Ich habe normalerweise nur mit kurzfristigen Cron-Jobs gearbeitet, bei denen die Zahlen mit 0 beginnen und meine Annahme in gewisser Weise Sinn ergab.
Comfreak
18
Ich habe nur nachgedacht, warum diese Frage nicht öfter gestellt wird, und bin zu dem gleichen Ergebnis gekommen: Weil nur wenige Leute Jobs mit einem "*" im Monatsfeld ausführen.
Sven
Eine Frage, was würde passieren, wenn sich die Zahl nicht teilt, zB */5? Wäre es 1,6,11,1,6 ... oder wäre es 1,6,11,4,9 ...? Ich nahm an, dass "über dem zulässigen Wertebereich" bedeutet, dass es kein Gedächtnis hat, aber jetzt war ich mir da nicht so sicher.
MariusSiuram
@MariusSiuram: Die erste Variante. Auch dies ist keine arithmetische Operation. crondNimmt einfach die Liste der möglichen Werte, wendet den Schrittwähler einmal an und verwendet diese Ergebnisse dann wiederholt.
Sven
4

Heute ist der erste Tag im November.

* / 2 bedeutet, dass Ihr Cronjob jeden zweiten Monat ausgeführt wird, wie Sie sagen.

Der Cronjob wird also im nächsten Monat (Dezember) nicht ausgeführt, sondern erst im darauf folgenden Monat (Januar).

Im Monat vor diesem Monat (Oktober) wurde der Cronjob nicht ausgeführt. Aber im September war es soweit.

Waisenkinder
quelle
1
Sie rechnen also damit, dass */2das Feld für den Monat dem Feld für den Monat entspricht 1-11/2und nicht 2-12/2. Ich sage nicht, dass Sie sich irren, aber können Sie Belege vorlegen?
MadHatter unterstützt Monica
@ MadHatter Sven hat es gut erklärt.
Waisenkinder
1
Ich stimme zu und am allerbesten zitierte er maßgebliche Quellen.
MadHatter unterstützt Monica
2
Nur darauf hingewiesen, September geht dem Oktober und nicht dem August voraus
;-)