Cron-Ausdrücke lesen und schreiben: Die fünf Felder und gängige Beispiele
Täglich um 2 Uhr sichern, werktags um 9 Uhr einen Bericht senden, alle zehn Minuten den Status prüfen: Hier finden Sie alles, um wiederkehrende Jobs mit Cron zu planen.
Die fünf Felder
Ein Standard-Unix-Cron-Ausdruck besteht aus fünf durch Leerzeichen getrennten Feldern: Minute (0–59), Stunde (0–23), Tag des Monats (1–31), Monat (1–12) und Wochentag (0–7, wobei 0 und 7 beide Sonntag sind). Der Job läuft, wann immer alle Felder passen.
So bedeutet 0 2 * * * Minute 0, Stunde 2, jeden Tag, jeden Monat, an jedem Wochentag — also täglich um 2:00 Uhr. Ein Sternchen steht für „jeder Wert“.
┌───── Minute (0-59)
│ ┌─── Stunde (0-23)
│ │ ┌─ Tag des Monats (1-31)
│ │ │ ┌ Monat (1-12)
│ │ │ │ ┌ Wochentag (0-7, So=0 oder 7)
│ │ │ │ │
0 2 * * *
Vier Sonderzeichen
Durch Kombination dieser vier lassen sich die meisten Zeitpläne abbilden. Manche Systeme akzeptieren auch Namen wie MON und JAN.
- * (jeder): * im Stundenfeld bedeutet jede Stunde.
- , (Liste): 1,15 bedeutet der 1. und der 15.
- - (Bereich): 1-5 im Wochentagsfeld bedeutet Montag bis Freitag.
- / (Schritt): */10 im Minutenfeld bedeutet 0, 10, 20 … alle zehn Minuten. Sie können auch einen Start angeben, etwa 5-59/15.
Gängige Beispiele
Berechnen Sie nach dem Schreiben eines Ausdrucks die nächsten Ausführungszeiten, um zu prüfen, ob er tut, was Sie wollen. Denken Sie daran, dass Schritte ab null zählen, nicht ab dem Start des Jobs: */45 im Minutenfeld läuft zu jeder Stunde um :00 und :45, nicht alle 45 Minuten.
*/5 * * * * alle 5 Minuten
0 * * * * jede volle Stunde
30 9 * * 1-5 werktags um 09:30
0 0 1 * * Mitternacht am 1. jedes Monats
0 18 * * 5 jeden Freitag um 18:00
0 3 * * 0 jeden Sonntag um 03:00
0 9,18 * * * täglich um 09:00 und 18:00
0 0 1 1 * Mitternacht am 1. Januar
Häufige Fallstricke
Der bekannteste Fallstrick ist, sowohl den Tag des Monats als auch den Wochentag festzulegen. 0 0 13 * 5 sieht aus wie „Freitag, der 13.“, doch im Standard-Cron werden beide Felder, wenn keines * ist, mit ODER verknüpft: Der Job läuft am 13. jedes Monats und an jedem Freitag.
Der zweite ist „der letzte Tag des Monats“. Standard-Cron mit fünf Feldern hat dafür kein Symbol; ein gängiger Ausweg ist, an den Tagen 28–31 zu laufen und das Skript prüfen zu lassen, ob morgen der 1. ist. Manche Scheduler wie Quartz unterstützen L, verwenden aber ein Format mit sechs oder sieben Feldern inklusive Sekunden, das nicht mit Standard-Cron kompatibel ist.
Welche Zeitzone verwendet Cron?
Cron folgt der Systemzeitzone des Servers. Die meisten Cloud-Server laufen in UTC, sodass ein für 9 Uhr deutscher Zeit gedachter Bericht je nach Jahreszeit um 10 oder 11 Uhr verschickt wird. 9 Uhr in Deutschland entspricht im Winter 8 Uhr UTC (im Sommer 7 Uhr UTC), auf einem UTC-Server schreiben Sie im Winter also 0 8 * * *.
Auch GitHub Actions und Kubernetes-CronJobs verwenden standardmäßig UTC. Da Deutschland die Sommerzeit nutzt, verschiebt sich die lokale Ausführungszeit zweimal im Jahr um eine Stunde.
Tipps für den Betrieb
Im Cron-Generator von AIBIZAP wählen Sie „täglich“ oder „wöchentlich“, und der Ausdruck wird für Sie erstellt — so stimmt der Zeitplan, ohne dass Sie die Syntax auswendig lernen müssen.
- Verteilen Sie aufwendige Jobs auf Minuten wie :07 oder :23, statt alle um :00 zu starten.
- Wenn ein Lauf womöglich nicht vor dem nächsten fertig wird, verhindern Sie Überschneidungen mit einer Sperre.
- Umgebung und PATH von Cron unterscheiden sich von Ihrer interaktiven Shell, verwenden Sie in Skripten daher absolute Pfade.
- Protokollieren Sie die Ausgabe jedes Laufs, damit kein Fehler unbemerkt bleibt.