Was ist ein Cron-Ausdruck?
Cron ist ein zeitbasierter Job-Scheduler, der in Unix/Linux-Systemen eingebaut ist. Ein Cron-Ausdruck ist die Syntax, die cron mitteilt, wann eine Aufgabe ausgeführt werden soll.
Du kennst sie: 0 0 * * *. Das bedeutet "um Mitternacht, jeden Tag." Aber sobald man über die Grundlagen hinausgeht, wird die Cron-Syntax schnell komplex — 5 Felder, optionale Sekunden, Plattformunterschiede und Sonderzeichen, die die meisten ohne Verständnis kopieren.
Dieser Leitfaden bringt Klarheit.
Die 5 (oder 6) Felder
Standard-Cron verwendet 5 durch Leerzeichen getrennte Felder:
┌──────────── Minute (0–59)
│ ┌────────── Stunde (0–23)
│ │ ┌──────── Tag des Monats (1–31)
│ │ │ ┌────── Monat (1–12)
│ │ │ │ ┌──── Wochentag (0–7, 0 und 7 = Sonntag)
│ │ │ │ │
* * * * *
Einige Systeme (AWS EventBridge, Spring, Quartz) fügen am Anfang ein Sekunden-Feld hinzu, was 6 Felder ergibt. Prüfe deine Plattform.
Sonderzeichen
| Zeichen | Bedeutung | Beispiel |
|---|---|---|
* | Alle Werte | * * * * * = jede Minute |
, | Mehrere Werte | 0 9,17 * * * = 9 und 17 Uhr |
- | Bereich | 0 9-17 * * * = jede Stunde von 9–17 Uhr |
/ | Schritt | */15 * * * * = alle 15 Minuten |
L | Letzter | 0 0 L * * = letzter Tag des Monats (nur Quartz) |
? | Kein Wert | 0 0 ? * MON = Montage, beliebiger Monatstag (Quartz) |
Häufige Cron-Ausdrücke
Jede Minute
* * * * *
Alle 5 Minuten
*/5 * * * *
Jede Stunde, zur vollen Stunde
0 * * * *
Täglich um Mitternacht
0 0 * * *
Täglich um 9 Uhr
0 9 * * *
Jeden Montag um 9 Uhr
0 9 * * 1
Jeden Werktag (Mo–Fr) um 8 Uhr
0 8 * * 1-5
Jedes Wochenende um 12 Uhr
0 12 * * 0,6
Ersten Tag jedes Monats um Mitternacht
0 0 1 * *
Jedes Quartal (Jan, Apr, Jul, Okt) um Mitternacht
0 0 1 1,4,7,10 *
Alle 30 Minuten zwischen 9 und 17 Uhr an Werktagen
*/30 9-17 * * 1-5
Die Fallen
"Alle 2 Stunden" ist 0 */2 * * *, nicht */2 * * * *
*/2 * * * * bedeutet alle 2 Minuten. Der Schritt bezieht sich auf das Feld, in dem er steht.
Sonntag ist 0 und 7
In Standard-Cron bedeuten 0 und 7 beide Sonntag. Vermeide Mehrdeutigkeit — verwende durchgängig 0.
Tag des Monats UND Wochentag sind ODER, nicht UND
0 0 1 * 1 läuft am 1. jeden Monats UND jeden Montag — nicht nur an Montagen, die auf den 1. fallen. Für "den ersten Montag des Monats" braucht man Skript-Logik außerhalb von Cron.
Zeitzonen
Cron läuft in der lokalen Zeitzone des Servers, sofern nicht anders konfiguriert. Ein Job bei 0 9 * * * auf einem UTC-Server läuft um 9 Uhr UTC — was in deiner Zeitzone 2 Uhr nachts oder 23 Uhr sein könnte.
Immer prüfen:
timedatectl # zeigt aktuelle Zeitzone unter Linux
Benannte Kürzel (nicht standard, aber weit verbreitet)
| Kürzel | Äquivalent | Bedeutung |
|---|---|---|
@yearly | 0 0 1 1 * | Einmal pro Jahr |
@monthly | 0 0 1 * * | Einmal pro Monat |
@weekly | 0 0 * * 0 | Einmal pro Woche (Sonntag) |
@daily | 0 0 * * * | Einmal täglich (Mitternacht) |
@hourly | 0 * * * * | Einmal pro Stunde |
@reboot | — | Beim Systemstart |
Cron-Ausdrücke generieren und validieren
Cron Generator ermöglicht es, Ausdrücke visuell zu erstellen — Zeitplan in einfacher Sprache wählen, Cron-Ausdruck erhalten. Kein Raten mehr, ob 0 9 * * 1-5 korrekt ist.
Funktioniert auch umgekehrt: beliebigen Cron-Ausdruck einfügen und eine Erklärung in verständlicher Sprache erhalten, wann er ausgeführt wird.
Schnellreferenz-Karte
# ┌──── Minute 0-59
# │ ┌─── Stunde 0-23
# │ │ ┌── Tag 1-31
# │ │ │ ┌─ Monat 1-12
# │ │ │ │ ┌ Wochentag 0-7 (0=So)
# │ │ │ │ │
* * * * * jede Minute
0 * * * * jede Stunde
0 0 * * * täglich um Mitternacht
0 9 * * 1 jeden Montag um 9 Uhr
*/15 * * * * alle 15 Minuten
0 0 1 * * erster Tag jedes Monats