Cron Syntax auf einen Blick
Ein Cron Ausdruck hat fünf durch Leerzeichen getrennte Felder:
┌───────────── Minute (0-59)
│ ┌───────────── Stunde (0-23)
│ │ ┌───────────── Tag des Monats (1-31)
│ │ │ ┌───────────── Monat (1-12 oder JAN-DEZ)
│ │ │ │ ┌───────────── Wochentag (0-7 oder SON-SAM)
│ │ │ │ │
* * * * *
Sonderzeichen
| Zeichen | Bedeutung | Beispiel | Ergebnis |
|---|---|---|---|
* | Jeder Wert | * * * * * | Jede Minute |
, | Liste | 1,15 * * * * | In Minute 1 und 15 |
- | Bereich | 0 9-17 * * * | Jede Stunde von 9 bis 17 Uhr |
/ | Schritt | */10 * * * * | Alle 10 Minuten |
- + / | Bereich mit Schritt | 0 8-18/2 * * * | Alle 2 Stunden von 8 bis 18 Uhr |
Gängige Zeitpläne
Alle N Minuten
| Ausdruck | Löst aus | Pro Stunde |
|---|---|---|
* * * * * | Jede Minute | 60 |
*/5 * * * * | Alle 5 Minuten | 12 |
*/10 * * * * | Alle 10 Minuten | 6 |
*/15 * * * * | Alle 15 Minuten | 4 |
*/30 * * * * | Alle 30 Minuten | 2 |
Stündlich und Täglich
| Ausdruck | Löst aus |
|---|---|
0 * * * * | Zu jeder vollen Stunde |
0 */2 * * * | Alle 2 Stunden |
0 */6 * * * | Alle 6 Stunden (Mitternacht, 6 Uhr, Mittag, 18 Uhr) |
0 0 * * * | Täglich um Mitternacht |
0 6 * * * | Täglich um 6 Uhr |
30 4 * * * | Täglich um 4:30 Uhr (häufig für Wartungsaufgaben) |
Werktags Zeitpläne
| Ausdruck | Löst aus |
|---|---|
0 9 * * 1-5 | Werktags um 9 Uhr |
0 0 * * 1-5 | Werktags um Mitternacht |
0 9 * * 1 | Jeden Montag um 9 Uhr |
0 0 * * 0 | Jeden Sonntag um Mitternacht |
0 17 * * 5 | Jeden Freitag um 17 Uhr |
Monatlich und Jährlich
| Ausdruck | Löst aus |
|---|---|
0 0 1 * * | Erster Tag jedes Monats um Mitternacht |
0 0 15 * * | 15. jedes Monats um Mitternacht |
0 0 1 1 * | 1. Januar um Mitternacht (jährlich) |
0 0 1 */3 * | Jedes Quartal (Jan, Apr, Jul, Okt) |
Aliase
Einige Cron Implementierungen unterstützen Kurzaliase:
| Alias | Entspricht | Bedeutung |
|---|---|---|
@yearly | 0 0 1 1 * | Einmal jährlich (1. Januar) |
@monthly | 0 0 1 * * | Einmal monatlich (1. Tag um Mitternacht) |
@weekly | 0 0 * * 0 | Einmal wöchentlich (Sonntag Mitternacht) |
@daily | 0 0 * * * | Einmal täglich (Mitternacht) |
@hourly | 0 * * * * | Einmal stündlich (zu jeder vollen Stunde) |
@reboot | N/A | Einmal beim Systemstart |
Feldwertbereiche
| Feld | Bereich | Namen erlaubt |
|---|---|---|
| Minute | 0-59 | Nein |
| Stunde | 0-23 | Nein |
| Tag des Monats | 1-31 | Nein |
| Monat | 1-12 | JAN, FEB, MÄR, APR, MAI, JUN, JUL, AUG, SEP, OKT, NOV, DEZ |
| Wochentag | 0-7 | SON, MON, DIE, MIT, DON, FRE, SAM (0 und 7 sind beide Sonntag) |
Monats und Wochentagsnamen sind in den meisten Implementierungen case insensitive. Namen funktionieren in Bereichen (MON-FRE), aber nicht in Schritten (MON/2 ist nicht gültig).
Häufige Fallstricke
ODER Logik zwischen Tagesfeldern
Wenn sowohl Tag des Monats als auch Wochentag keinen Platzhalterwert haben, verwendet Standard Cron ODER Logik. 0 9 15 * 1 löst am 15. jedes Monats UND jeden Montag aus, nicht nur an Montagen, die der 15. sind.
Zeitzone ist wichtig
Cron verwendet standardmäßig die lokale Systemzeit. Wenn dein Server auf UTC eingestellt ist, du aber 0 9 * * * in der Erwartung von 9 Uhr Eastern planst, läuft der Job um 4 oder 5 Uhr Eastern (abhängig von der Sommerzeit). Setze TZ=Europe/Berlin in deiner crontab oder verwende CRON_TZ, falls deine Implementierung dies unterstützt.
Schrittwerte setzen sich nicht fort
*/5 im Minutenfeld setzt jede Stunde zurück. Wenn ein Job um 10:55 läuft, ist die nächste Ausführung um 11:00, nicht um 11:05. Der Schritt zählt immer vom Beginn des Bereichs.
Keine Sekundengenauigkeit
Standard Crons kleinste Einheit ist 1 Minute. Für Zeitpläne unterhalb der Minute verwende einen langlebigen Prozess mit einer Sleep Schleife, einen systemd Timer oder einen Job Scheduler wie Celery Beat oder Temporal.