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
7Eine 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.
| Ausdruck | Bereich | Bedeutung |
|---|---|---|
| * * * * * | min hod dom mes dow | Die 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. |
| minute | 0-59 | Erstes Feld |
| hour | 0-23 | Zweites Feld, im 24-Stunden-Format |
| day of month | 1-31 | Drittes FeldEin Tag, der in einem bestimmten Monat nicht existiert, wird einfach übersprungen — der 31. wird siebenmal im Jahr ausgeführt, nicht zwölfmal. |
| month | 1-12 | Viertes Feld |
| day of week | 0-7 | Fünftes Feld, Sonntag zuerstSowohl 0 als auch 7 bedeuten Sonntag, darum läuft der Bereich bis sieben statt sechs. |
| 0 5 13 * 5 | Wenn 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
10Die gleichen vier Operatoren funktionieren in jedem Feld; nur die Zahlen, die sie akzeptieren, ändern sich.
| Ausdruck | Bereich | Bedeutung |
|---|---|---|
| * | Jeden Wert, den das Feld erlaubt | |
| 1,15,30 | Eine Liste einzelner Werte | |
| 9-17 | Ein Bereich einschließlich beider Enden | |
| */15 | Jeden 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/2 | Jeden n-ten Wert innerhalb eines Bereichs | |
| 5/10 | Jeden n-ten Wert von einem Startpunkt bis zum Feldende | |
| 0,30 9-17 * * 1-5 | Operatoren können in jedem Feld frei kombiniert werdenZur halben und ganzen Stunde zwischen neun und fünf, Montag bis Freitag. | |
| JAN-DEC | 1-12 | Monatsnamen, drei Buchstaben, Großschreibung egal |
| SUN-SAT | 0-6 | Tagnamen, drei Buchstaben, Großschreibung egal |
| 7 | 0 | Sonntag, auf die andere Art geschrieben |
Verknüpfte Makros
7Sieben 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.
| Ausdruck | Bereich | Bedeutung |
|---|---|---|
| @hourly | 0 * * * * | An der Oberseite jeder Stunde |
| @daily | 0 0 * * * | Einmal täglich um Mitternacht |
| @midnight | 0 0 * * * | Dasselbe wie @daily |
| @weekly | 0 0 * * 0 | Einmal pro Woche, Sonntag um Mitternacht |
| @monthly | 0 0 1 * * | Der erste des Monats um Mitternacht |
| @yearly | 0 0 1 1 * | Der erste Januar um Mitternacht |
| @annually | 0 0 1 1 * | Dasselbe wie @yearly |
Praktische Beispiele
14Lesen 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.
| Ausdruck | Bereich | Bedeutung |
|---|---|---|
| * * * * * | 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-5 | Alle fünfzehn Minuten während der Arbeitszeiten an Arbeitstagen | |
| 0 8 * * 1-5 | An Arbeitstagen um 08:00 | |
| 0 10 * * 6,0 | Samstags und sonntags um 10:00 | |
| 30 7 * * MON | Montags 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
6Quartz, 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.
| Ausdruck | Bereich | Bedeutung |
|---|---|---|
| ? | "Kein bestimmter Wert" im Tagesfeld, das der andere bereits einschränkt | |
| L | Der letzte Tag des Monats oder der letzte angegebene Wochentag | |
| 15W | Der Arbeitstag dem 15. am nächsten | |
| FRI#3 | Der 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. | |
| @reboot | Einmal 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. |