Cron-Ausdruck lesen: Feld für Feld erklärt
Ein Cron-Ausdruck ist eine kurze Textzeile, die einem Scheduler sagt, wann er einen Job ausführen soll. Die übliche Form hat fünf Felder, durch Leerzeichen getrennt: Minute, Stunde, Tag des Monats, Monat und Wochentag. Die Zeile 0 9 * * 1-5 bedeutet 09:00 Uhr, Montag bis Freitag. Jedes Feld ist eine Zahl, ein Name, eine Liste, ein Bereich oder ein Schritt, oder * für jeden Wert. Ein Job läuft zu jedem Zeitpunkt, an dem alle Felder zutreffen.
Die fünf Felder
| Feld | Erlaubte Werte | Beispiel |
|---|---|---|
| Minute | 0 bis 59 | 30 ist Minute 30 der Stunde |
| Stunde | 0 bis 23 | 9 ist 09:00 Uhr, im 24-Stunden-Format |
| Tag des Monats | 1 bis 31 | 15 ist der 15. |
| Monat | 1 bis 12 oder JAN bis DEC | 3 oder MAR ist März |
| Wochentag | 0 bis 6 oder SUN bis SAT | 0 oder SUN ist Sonntag, 1 ist Montag |
Manche Systeme akzeptieren auch 7 für Sonntag, aber nicht alle. Verwende deshalb 0 oder SUN. In dieser Form hat Cron kein Sekundenfeld, der kleinste Schritt ist also eine Minute.
Listen, Bereiche, Schritte und Namen
steht für jeden Wert im Feld.* * * *läuft jede Minute.- Eine Liste nutzt Kommas.
0 9,17 * * *läuft jeden Tag um 09:00 Uhr und um 17:00 Uhr. - Ein Bereich nutzt einen Bindestrich.
1-5im Wochentagsfeld bedeutet Montag bis Freitag. - Ein Schritt nutzt einen Schrägstrich.
*/15im Minutenfeld bedeutet 0, 15, 30 und 45.10-30/5bedeutet 10, 15, 20, 25 und 30. - Namen wie
MON-FRIkönnen Zahlen ersetzen. Sie sind leichter zu lesen, wenn dein Scheduler sie akzeptiert.
Diese Teile lassen sich kombinieren. 0 8-18/2 * * * läuft zu Minute 0 jeder zweiten Stunde von 08:00 bis 18:00 Uhr.
Gängige Zeitpläne
| Ausdruck | Bedeutung |
|---|---|
* * * * * | Jede Minute |
/15 * * * | Alle 15 Minuten |
0 * * * * | Zu Minute 0 jeder Stunde |
0 2 * * * | Jeden Tag um 02:00 Uhr |
0 9 * * 1-5 | 09:00 Uhr, Montag bis Freitag |
0 9,17 * * * | Jeden Tag um 09:00 und 17:00 Uhr |
30 6 1 * * | 06:30 Uhr am 1. jedes Monats |
0 0 * * 0 | Mitternacht jeden Sonntag |
0 0 1 1 * | Mitternacht am 1. Januar |
/5 9-17 * 1-5 | Alle 5 Minuten von 09:00 bis 17:55 Uhr, Montag bis Freitag |
Beachte: 0 0 * * ist Mitternacht, und 0 12 * * ist Mittag. Die falsche Stunde zu wählen ist einer der häufigsten Fehler.
Tag des Monats und Wochentag
Wenn sowohl das Feld für den Tag des Monats als auch das für den Wochentag eingeschränkt sind, läuft der Job, wenn eines der beiden zutrifft. Das ist die klassische Regel in Vixie cron und in vielen davon abgeleiteten Systemen. 0 0 13 * 5 läuft also um Mitternacht am 13. jedes Monats und außerdem jeden Freitag. Oft erwarten Leute nur Freitag, den 13., und bekommen dann mehr Läufe als geplant.
Ist eines der beiden Felder *, zählt nur das andere. Um nur an einem Freitag, dem 13., zu laufen, plane einen Job für jeden Freitag und prüfe das Datum im Skript. Andere Scheduler, auch manche Cloud-Dienste, können abweichende Regeln haben. Lies deshalb deren Dokumentation.
Zeitzonen und Sommerzeit
Cron läuft nach der Uhr der Maschine oder des Dienstes, auf dem er läuft, meist also nach der lokalen Zeitzone dieser Maschine. Ein Job, der auf 02:30 Uhr gestellt ist, läuft um 02:30 Uhr nach dieser Uhr. Prüfe zuerst die Zeitzone (unter Linux zeigt date sie an). Wenn Jobs überall nach einer einheitlichen Uhr laufen sollen, stellen viele Teams Server auf UTC um, und manche Scheduler lassen dich für jeden Job eine Zeitzone festlegen.
Die Sommerzeit stellt die Uhr zweimal im Jahr um. Im Frühjahr springen viele Orte direkt von 02:00 auf 03:00 Uhr, sodass ein Job um 02:30 Uhr keine Zeit zum Laufen hat. Im Herbst kommt die Stunde von 01:00 bis 01:59 Uhr zweimal vor. Scheduler gehen mit diesen Fällen unterschiedlich um. Manche überspringen den Job, manche führen ihn einmal aus, manche zweimal. Lege Jobs außerhalb des frühen Umstellungsfensters, oder nutze UTC, wenn dir der Unterschied wichtig ist.
Sechs Felder und Quartz
Manche Scheduler fügen vorne ein Sekundenfeld hinzu, sodass /10 * * * * alle 10 Sekunden läuft. Der Quartz-Scheduler für Java verwendet Sekunden, Minuten, Stunden, Tag des Monats, Monat, Wochentag und optional ein Jahr, und er kennt vier Sonderzeichen:
?bedeutet „kein bestimmter Wert“. Quartz verlangt es entweder im Feld für den Tag des Monats oder im Feld für den Wochentag, je nachdem, welches du nicht setzt.Lsteht für „letzte“.Lim Feld für den Tag des Monats ist der letzte Tag des Monats, und6Lim Wochentagsfeld ist der letzte Freitag.Wsteht für den nächstgelegenen Werktag.15Wist der Werktag, der dem 15. am nächsten liegt, und es springt dabei nicht in einen anderen Monat.#steht für den n-ten Wochentag.6#3ist der dritte Freitag.
Quartz zählt die Wochentage anders als die Form mit fünf Feldern. Seine 1 ist Sonntag und 7 ist Samstag, Montag bis Freitag ist also 2-6 und nicht 1-5. Prüfe immer, welches Format dein Scheduler verwendet, bevor du eine Zeile kopierst.
Häufige Fehler
*/7im Minutenfeld. Die Werte sind 0, 7, 14 und so weiter bis 56. Der nächste wäre 63, und das gibt es nicht. Der nächste Lauf nach 56 ist daher zu Minute 0 der nächsten Stunde. Der Abstand beträgt dann nur vier Minuten, und die Abstände sind ungleichmäßig. Verwende einen Schritt, der 60 ohne Rest teilt, etwa 5, 10, 15 oder 30.- Der 30. Februar. Ein solches Datum gibt es nicht, deshalb läuft
0 0 30 2 *nie. Dasselbe gilt für den 31. in einem Monat mit 30 Tagen. Wegen der Entweder-oder-Regel kann eine Einschränkung beim Wochentag trotzdem Läufe an anderen Tagen auslösen. Prüfe deshalb das Ergebnis. - Stunde 24 oder Minute 60. Diese Werte liegen außerhalb des Bereichs. Die meisten Scheduler lehnen sie beim Speichern ab, aber nicht alle.
- Sekunden erwarten. Eine Zeile mit fünf Feldern läuft nur zu ganzen Minuten.
- Cron mit regulären Ausdrücken verwechseln. In Cron bedeutet
jeden Wert. In einem regulären Ausdruck bedeutetdie Wiederholung des davorstehenden Elements. Verwende für Muster den Regex-Tester und halte Cron-Zeilen getrennt.
Die nächsten Läufe prüfen
Bevor du dich auf einen Zeitplan verlässt, lies die Zeile in einfachen Worten und notiere dir die nächsten paar Laufzeiten. Der Cron-Erklärer macht beides, und so erkennst du am schnellsten die Entweder-oder-Regel oder einen ungewöhnlichen Schritt.
Kurze Antworten
Ist das erste Feld Minuten oder Sekunden?
Minuten, in der Standardform mit fünf Feldern. Nur manche Scheduler mit sechs Feldern fügen Sekunden hinzu, und die stehen dann vorne.
Warum läuft mein Job freitags und außerdem am 13.?
Das Feld für den Tag des Monats und das für den Wochentag sind beide gesetzt, deshalb läuft der Job, wenn eines von beiden zutrifft. Setze ein Feld auf *, wenn nur das andere gelten soll.
Verwendet Cron UTC?
Nur, wenn Maschine oder Dienst auf UTC eingestellt ist. Sonst verwendet er die lokale Zeitzone dieses Systems.
Mit KI-Unterstützung aus dem Englisches Original übersetzt.
Kommentare
Noch keine Kommentare. Schreib den ersten.


