Zum Inhalt springen

Cron-Ausdruckssyntax

Ein Cron-Ausdruck ist fünf Felder, die beschreiben, wann etwas ausgeführt werden soll. Jedes Feld sagt, welche Werte seiner Einheit akzeptabel sind, und der Job wird in jeder Minute ausgeführt, in der sich alle fünf einigen. Das ist das ganze Modell: es gibt keine Dauer, kein „alle 90 Minuten“ und nirgends wird eine Nächster-Ausführung-Status behalten.

Die Felder werden von links nach rechts gelesen als Minute, Stunde, Tag des Monats, Monat, Tag der Woche. Die Beispiele unten sind diejenigen, auf die Leute tatsächlich greifen, und jeder wird vom eigenen Cron-Parser dieser Website vor dem Erstellen dieser Seite geparst.

Der letzte Abschnitt listet die Syntax auf, die wie Cron aussieht, aber hier nicht akzeptiert wird: Quartz- und Jenkins-Erweiterungen und die sechsfeld-Form mit Sekunden. Es lohnt sich, sie zu erkennen, weil ein kopierter Ausdruck, der eines davon verwendet, einfach fehlschlag.

Die fünf Felder

7

Eine Cron-Zeile besteht aus fünf durch Leerzeichen getrennten Feldern, dann dem Befehl. Jedes Feld muss vorhanden sein; es gibt keine Möglichkeit, eines auszulassen.

AusdruckBereichBedeutung
* * * * *min hod dom mes dowDie fünf Felder in Reihenfolge: Minute, Stunde, Tag des Monats, Monat, Tag der WocheFünf Sternchen bedeuten jede Minute jedes Tages — der lockerste Ausdruck, den es gibt.
minute0-59Erstes Feld
hour0-23Zweites Feld, im 24-Stunden-Format
day of month1-31Drittes FeldEin Tag, der in einem bestimmten Monat nicht existiert, wird einfach übersprungen — der 31. wird siebenmal im Jahr ausgeführt, nicht zwölfmal.
month1-12Viertes Feld
day of week0-7Fünftes Feld, Sonntag zuerstSowohl 0 als auch 7 bedeuten Sonntag, darum läuft der Bereich bis sieben statt sechs.
0 5 13 * 5Wenn beide Tagesfelder eingeschränkt sind, wird Cron bei entweder ausgeführt — nicht bei beidenDies wird am 13. und an jedem Freitag ausgeführt, darum ist es nicht "Freitag der 13.". Es ist die eine Cron-Regel, die jeden überrascht.

Operatoren

10

Die gleichen vier Operatoren funktionieren in jedem Feld; nur die Zahlen, die sie akzeptieren, ändern sich.

AusdruckBereichBedeutung
*Jeden Wert, den das Feld erlaubt
1,15,30Eine Liste einzelner Werte
9-17Ein Bereich einschließlich beider Enden
*/15Jeden n-ten Wert über das ganze Feld*/15 im Minutenfeld bedeutet :00, :15, :30 und :45 — es wird vom Feldanfang gezählt, nicht von jetzt.
9-17/2Jeden n-ten Wert innerhalb eines Bereichs
5/10Jeden n-ten Wert von einem Startpunkt bis zum Feldende
0,30 9-17 * * 1-5Operatoren können in jedem Feld frei kombiniert werdenZur halben und ganzen Stunde zwischen neun und fünf, Montag bis Freitag.
JAN-DEC1-12Monatsnamen, drei Buchstaben, Großschreibung egal
SUN-SAT0-6Tagnamen, drei Buchstaben, Großschreibung egal
70Sonntag, auf die andere Art geschrieben

Verknüpfte Makros

7

Sieben Namen, die einen ganzen Ausdruck ersetzen. Sie sind eine Zweckmäßigkeit des Crontab-Dateiformats, nicht der Feldgrammatik, darum ein Planer, der Cron-Strings liest, muss sie nicht unbedingt akzeptieren.

AusdruckBereichBedeutung
@hourly0 * * * *An der Oberseite jeder Stunde
@daily0 0 * * *Einmal täglich um Mitternacht
@midnight0 0 * * *Dasselbe wie @daily
@weekly0 0 * * 0Einmal pro Woche, Sonntag um Mitternacht
@monthly0 0 1 * *Der erste des Monats um Mitternacht
@yearly0 0 1 1 *Der erste Januar um Mitternacht
@annually0 0 1 1 *Dasselbe wie @yearly

Praktische Beispiele

14

Lesen Sie einen von rechts nach links, wenn er keinen Sinn macht: das gröbste Feld ist rechts und entscheidet, welche Tage die feineren überhaupt konsultiert werden.

AusdruckBereichBedeutung
* * * * *Jede Minute
*/5 * * * *Alle fünf Minuten
0 * * * *Jede Stunde, zur Stunde
0,30 * * * *Jede halbe Stunde
0 3 * * *Jeden Tag um 03:00
0 9,17 * * *Zweimal täglich, um 09:00 und 17:00
*/15 9-17 * * 1-5Alle fünfzehn Minuten während der Arbeitszeiten an Arbeitstagen
0 8 * * 1-5An Arbeitstagen um 08:00
0 10 * * 6,0Samstags und sonntags um 10:00
30 7 * * MONMontags um 07:30
0 0 1 * *Mitternacht am ersten eines jeden Monats
0 0 28-31 * *Jeden Tag im letzten Teil des MonatsStandard-Cron kennt keinen "letzten Tag des Monats". Dies wird bis zu viermal ausgeführt; ein Skript, das das Datum prüft und früh beendet wird, ist die übliche Behebung.
0 0 1 1,4,7,10 *Mitternacht am ersten eines jeden Quartals
0 0 1 1 *Einmal im Jahr, am Anfang des 1. Januar

Erweiterungen, die diese Website nicht akzeptiert

6

Quartz, Jenkins und einige Cloud-Planer fügen diese hinzu. Sie sind aufgelistet, damit Sie sie in jemand anderem Crontab erkennen — der Parser auf dieser Website lehnt alle ab, genau wie der mit Linux versendete Cron.

AusdruckBereichBedeutung
?"Kein bestimmter Wert" im Tagesfeld, das der andere bereits einschränkt
LDer letzte Tag des Monats oder der letzte angegebene Wochentag
15WDer Arbeitstag dem 15. am nächsten
FRI#3Der dritte Freitag des Monats
*/30 * * * * *Ein sechstes Feld für Sekunden, vorneSechs Felder, nicht fünf. Quartz und mehrere Sprachbibliotheken verwenden diese Form; die Crontab-Datei nicht.
@rebootEinmal ausführen, wenn die Maschine startetReal in Crontab, aber es ist kein Zeitplan — es gibt keinen zu berechnenden nächsten Lauf, deshalb lehnt der Parser hier ab.

Häufige Fragen

Warum wurde mein "Freitag der 13." Job jeden Freitag ausgeführt?
Weil wenn beide das Tagesfeld des Monats und des Tages der Woche eingeschränkt sind, Cron sie als entweder/oder behandelt, nicht als und. 0 5 13 * 5 wird am 13. und an jedem Freitag ausgeführt. Ein echter Freitag der 13. braucht eine Datumsprüfung im Skript selbst.
Bedeutet */5 "fünf Minuten von jetzt an"?
Nein. Schritte werden vom Anfang des Feldbereichs gezählt, nicht vom Zeitpunkt der Job-Installation, darum bedeutet */5 im Minutenfeld :00, :05, :10 und so weiter — unabhängig davon, wann es geschrieben wurde.
Welche Zeitzone verwendet Cron?
Die des Systems, es sei denn, der Crontab setzt CRON_TZ oder TZ oben. Dies ist zweimal im Jahr wichtig: ein Job im geplanten Zeitpunkt, der von einer Sommerzeitwechsel übersprungen wird, wird nicht ausgeführt, und ein Job im Zeitpunkt, der sich wiederholt, könnte zweimal ausgeführt werden.
Ist 0 dasselbe wie 7 im Tagesfeld der Woche?
Ja, beide sind Sonntag. Das Duplikat existiert, damit ein Bereich wie 1-7 Montag bis Sonntag natürlich geschrieben werden kann, was ein 0-6-Feld in einem Bereich nicht ausdrücken kann.
Wo kann ich einen Ausdruck testen?
Der Cron-Parser auf dieser Website nimmt einen Ausdruck und zeigt die nächsten Ausführungen in Klartext, lokal in Ihrem Browser. Das Werkzeug daneben geht umgekehrt: Wählen Sie einen Zeitplan und es schreibt den Ausdruck.