Cron-Ausdrücke lesen
Ein Cron-Ausdruck beschreibt einen wiederkehrenden Zeitplan in wenigen, durch Leerzeichen getrennten Feldern. Das Prinzip ist einfach, doch Feldreihenfolge und Sonderzeichen unterscheiden sich zwischen Systemen. Diese Anleitung zeigt, wie Sie die gängigen Formate lesen.
Die fünf Unix-Felder
Das klassische Cron unter Unix und Linux verwendet fünf Felder, die von links nach rechts gelesen werden:
Minute Stunde Tag-im-Monat Monat Wochentag
So bedeutet 30 9 * * 1-5 „um 09:30 Uhr, Montag bis Freitag“. Minuten reichen von 0 bis 59, Stunden von 0 bis 23, Tage im Monat von 1 bis 31 und Monate von 1 bis 12. Der Wochentag reicht von 0 bis 6, wobei 0 für Sonntag steht (viele Implementierungen akzeptieren für Sonntag auch 7). Die meisten Versionen akzeptieren außerdem Namen wie JAN oder MON sowie Makros wie @daily oder @hourly.
Formate von Spring, Quartz und AWS
Andere Scheduler fügen Felder hinzu – das ist die häufigste Ursache für Verwirrung, wenn ein Ausdruck von einem System in ein anderes kopiert wird.
| Format | Felder | Wochentag |
|---|---|---|
| Unix / Linux | 5: Minute Stunde Tag Monat Wochentag | 0–6, Sonntag = 0 |
| Spring | 6: Sekunde Minute Stunde Tag Monat Wochentag | 0–7, Sonntag = 0 oder 7 |
| Quartz | 6 oder 7: Sekunde Minute Stunde Tag Monat Wochentag [Jahr] | 1–7, Sonntag = 1 |
| AWS EventBridge | 6: Minute Stunde Tag Monat Wochentag Jahr | 1–7, Sonntag = 1 |
Dieselben Ziffern können Unterschiedliches bedeuten: 0 0 12 * * ? heißt in Quartz „jeden Tag um 12 Uhr mittags“, wäre aber in einer Lesart mit 5 Feldern ungültig. Auch die Wochentagsnummern verschieben sich: In Quartz und AWS ist 2 Montag, in Unix-Cron dagegen Dienstag. Wochentagsnamen wie MON vermeiden diese Mehrdeutigkeit, wo sie unterstützt werden.
Sonderzeichen
*jeder Wert des Feldes.,eine Liste, z. B.1,15.-ein Bereich, z. B.9-17oderMON-FRI./ein Schritt:*/15im Minutenfeld bedeutet alle 15 Minuten;5/15beginnt bei 5 (vom klassischen Unix-Cron nicht unterstützt, dort verwendet man einen Bereich wie5-59/15).?„kein bestimmter Wert“; Quartz und AWS verlangen ihn entweder bei Tag im Monat oder bei Wochentag.Lletzter:Lbei Tag im Monat ist der letzte Tag des Monats; in Quartz ist6Lbei Wochentag der letzte Freitag.Wnächster Werktag:15Wist der Werktag, der dem 15. am nächsten liegt.#n-ter Wochentag im Monat:6#3ist in der Nummerierung von Quartz und AWS der dritte Freitag.
L, W und # sind Erweiterungen, die das klassische Unix-Cron nicht unterstützt.
Tag im Monat und Wochentag
Wenn beide Tagesfelder eingeschränkt sind, kombinieren die Systeme sie unterschiedlich. Im klassischen Unix-Cron läuft der Job, wenn eines der beiden Felder passt: 0 9 13 * 5 läuft am 13. jedes Monats und an jedem Freitag, nicht nur an Freitag, dem 13. Spring verlangt, dass beide passen. Quartz und AWS umgehen die Frage, indem sie ? in einem der beiden Felder verlangen.
Der LeedyBox-Cron-Parser wendet die Regel des gewählten Formats an und erklärt in seiner Zusammenfassung, ob einer der beiden Tage oder beide passen müssen.
Zeitzonen und Sommerzeit
Ein Cron-Ausdruck enthält keine Zeitzone. Er läuft in der Zeitzone des Systems oder Dienstes, der ihn ausführt – das kann die Ortszeit des Servers oder UTC sein. Ein Job, der für 09:00 Uhr Ortszeit geschrieben wurde, kann zu einer anderen Stunde laufen, wenn der Server UTC verwendet.
Die Sommerzeit bringt weitere Sonderfälle mit sich. Wenn die Uhren vorgestellt werden, gibt es eine Uhrzeit wie 02:30 an diesem Tag möglicherweise nicht; wenn sie zurückgestellt werden, kann sie zweimal vorkommen. Je nach Implementierung kann ein Job in diesem Zeitfenster übersprungen werden, verspätet laufen oder zweimal laufen. Wichtige Jobs außerhalb des Umstellungsfensters oder in UTC zu planen, verringert Überraschungen. Im Cron-Parser können Sie eine Zeitzone wählen und die nächsten Ausführungszeiten auflisten lassen, um Termine rund um eine Umstellung zu prüfen.
Häufige Fragen
Wie lasse ich einen Job alle 5 Minuten laufen?
In Unix-Cron verwenden Sie */5 * * * *. In Spring fügen Sie am Anfang ein Sekundenfeld hinzu: 0 */5 * * * *.
Warum schlägt mein Quartz-Ausdruck in der Linux-Crontab fehl?
Quartz-Ausdrücke beginnen mit einem Sekundenfeld und können ? oder L verwenden, was crontab nicht akzeptiert. Schreiben Sie den Ausdruck im Format mit 5 Feldern neu.
Sind die vom Parser angezeigten nächsten Ausführungszeiten exakt?
Sie werden in Ihrem Browser für das gewählte Format und die gewählte Zeitzone berechnet. Prüfen Sie den Zeitplan auf dem System, das den Job ausführen wird, da sich Implementierungen unterscheiden können.