Zum Hauptinhalt springen

← Zurück zum Blog

Cron-Ausdrücke erklärt: Die 5 Felder und häufige Beispiele

Cron ist die Art, wie Unix-artige Systeme wiederkehrende Jobs planen, und sein Ausdrucksformat taucht weit über crontab hinaus auf — in CI-Pipelines, Kubernetes-CronJobs und Cloud-Schedulern. Die Syntax wirkt zunächst kryptisch, ist aber nur fünf durch Leerzeichen getrennte Felder.

Die fünf Felder

┌── Minute (0–59)
│ ┌── Stunde (0–23)
│ │ ┌── Tag des Monats (1–31)
│ │ │ ┌── Monat (1–12)
│ │ │ │ ┌── Wochentag (0–7, 0 und 7 = Sonntag)
│ │ │ │ │
* * * * *

Jedes Feld beantwortet „bei welchen Werten läuft das?”. Ein * bedeutet „jeder”. * * * * * läuft also jede einzelne Minute.

Syntax innerhalb eines Feldes

  • * — jeder Wert.
  • 5 — genau 5.
  • 1-5 — ein Bereich, 1 bis 5.
  • */15 — ein Schritt: jeder 15. Wert (0, 15, 30, 45).
  • 1,15,30 — eine Liste bestimmter Werte.
  • NamenJANDEC für Monate, SUNSAT für Wochentage.

Einsatzfertige Beispiele

AusdruckBedeutung
* * * * *Jede Minute
*/5 * * * *Alle 5 Minuten
0 * * * *Jede Stunde, zur vollen Stunde
0 9 * * *Täglich um 09:00
0 9 * * 1-5Werktags um 09:00
0 0 * * 0Jeden Sonntag um Mitternacht
0 0 1 * *Am 1. jedes Monats
30 3 1 1 *03:30 am 1. Januar

Die eine Falle: Tag des Monats vs. Wochentag

Wenn beide Felder — Tag des Monats und Wochentag — eingeschränkt sind (nicht *), läuft Cron, wenn eines passt — nicht beide. 0 0 13 * 5 feuert also am 13. und an jedem Freitag, nicht nur an Freitag, dem 13. Im Zweifel gegen echte Laufzeiten prüfen.

Vor dem Ausrollen prüfen

Am sichersten vertraust du einem Cron, wenn du die tatsächlichen Zeitpunkte siehst, zu denen er feuert. Der Cron-Ausdruck-Generator erklärt jedes Feld in Klartext und listet die nächsten Laufzeiten in deiner lokalen Zone — mit Ein-Klick-Vorlagen. Alles läuft im Browser.

Verwandte Tools

Kürzel-Strings

Die meisten Cron-Daemons akzeptieren benannte Kürzel statt der fünf Felder:

KürzelEntsprichtLäuft
@yearly (oder @annually)0 0 1 1 *Einmal im Jahr, 1. Jan
@monthly0 0 1 * *Am 1. jedes Monats
@weekly0 0 * * 0Jeden Sonntag
@daily (oder @midnight)0 0 * * *Täglich um Mitternacht
@hourly0 * * * *Jede Stunde
@rebootEinmal beim Start

Achte auch auf Varianten mit anderer Feldzahl: Springs @Scheduled, Quartz und manche Cloud-Scheduler stellen ein Sekunden-Feld voran (sechs Felder), und AWS EventBridge nutzt eine Sechs-Feld-Form, die verbietet, Tag des Monats und Wochentag zugleich zu setzen. Ein Fünf-Feld-Ausdruck in einem Sechs-Feld-Parser ist um ein Feld verschoben.

Zeitzonen und Sommerzeit

Das klassische crontab hat kein Zeitzonen-Feld — es feuert in der lokalen Zeit des Daemons. Unter Linux überschreibst du das pro Datei mit einer Zeile CRON_TZ=UTC (oder TZ); die meisten Cloud-Scheduler bieten stattdessen ein Zeitzonen-Dropdown. Für alles, was über Regionen hinweg geteilt wird, ist UTC die sichere Voreinstellung, damit niemand über Offsets nachdenken muss.

Die Sommerzeit-Umstellung ist die klassische Falle. Beim Vorstellen der Uhr läuft ein Job in der übersprungenen Stunde (etwa 30 2 * * *) an dem Tag womöglich nicht; beim Zurückstellen kann ein Job in der wiederholten Stunde zweimal laufen. Lege kritische Jobs außerhalb des Fensters 01:00–03:00 oder betreibe sie in UTC. Wenn du auch mit Epoch-Zeiten hantierst, erklärt der komplette Leitfaden zu Unix-Timestamps, wie diese auf die Uhrzeit abbilden.

Kurzes FAQ

  • Lassen sich Bereiche und Schritte kombinieren? Ja — 0-30/10 bedeutet 0, 10, 20, 30.
  • Was heißt */2 im Stunden-Feld? Jede zweite Stunde: 0, 2, 4 … 22.
  • Holt Cron verpasste Läufe nach? Nein. Ist die Maschine zur geplanten Zeit aus, überspringt einfaches Cron sie — nutze anacron, wenn Nachholen zählt.