Cron-Ausdrücke: Alles planen ohne Rätselraten
Diese kryptischen Planungs-Strings endlich erklärt. Schreibe Cron-Ausdrücke, die beim ersten Mal funktionieren.
0 0 * * * – was bedeutet das?
Wenn du AWS Lambda, GitHub Actions oder einen Task-Scheduler verwendet hast, hast du Cron-Ausdrücke gesehen. Fünf oder sechs kryptische Felder, die irgendwie Jobs planen.
Sie sind nicht so kompliziert, wie sie aussehen.
Die fünf Felder
┌───────────── Minute (0 - 59)
│ ┌───────────── Stunde (0 - 23)
│ │ ┌───────────── Tag des Monats (1 - 31)
│ │ │ ┌───────────── Monat (1 - 12)
│ │ │ │ ┌───────────── Wochentag (0 - 6, Sonntag = 0)
│ │ │ │ │
* * * * *
Jedes Feld begrenzt, wann der Job läuft. Ein * bedeutet „jeder". Eine Zahl bedeutet „nur dieser Wert".
Beispiele lesen
0 0 * * * — Minute 0, Stunde 0, jeder Tag, jeder Monat, jeder Wochentag = Mitternacht jeden Tag
30 8 * * 1-5 — 8:30 Uhr, Montag bis Freitag = Werktags morgens
0 */2 * * * — Alle 2 Stunden = 2 Uhr, 4 Uhr, 6 Uhr...
0 9 1 * * — 9 Uhr am 1. jeden Monats = Monatlicher Berichts-Zeitpunkt
Spezielle Zeichen
* — Jeder Wert (jede Minute, jede Stunde, etc.)
, — Mehrere Werte. 1,15 bedeutet der 1. und 15.
- — Bereich. 1-5 bedeutet 1 bis 5.
/ — Schritt. */15 bedeutet alle 15. */15 im Minutenfeld = alle 15 Minuten.
Häufige Muster
Alle 5 Minuten: */5 * * * *
Jede Stunde um :30: 30 * * * *
Täglich um 3 Uhr: 0 3 * * *
Wöchentlich sonntags um Mitternacht: 0 0 * * 0
Erster Tag des Monats um 9 Uhr: 0 9 1 * *
Werktags um 18 Uhr: 0 18 * * 1-5
Die Fallstricke
Wochentag vs. Tag des Monats. Wenn du beide setzt, machen die meisten Systeme ein ODER daraus. 0 0 1 * 1 läuft am 1. UND jeden Montag, nicht nur an Montagen, die der 1. sind.
Zeitzone ist wichtig. Die meisten Cron-Systeme verwenden Serverzeit oder UTC. Wisse, mit welcher du es zu tun hast.
6-Felder vs. 5-Felder. Einige Systeme fügen ein Sekundenfeld am Anfang hinzu. 0 0 0 * * * wäre Mitternacht mit einem Sekundenfeld.
Sonntag = 0 oder 7. Hängt vom System ab. Beide funktionieren normalerweise für Sonntag.
Testen vor der Bereitstellung
Rate nicht, ob 0 0 */2 * * alle 2 Tage oder alle 2 Stunden läuft. Verwende einen Cron-Parser.
Gehe ein paar erwartete Auslösezeiten durch. Stelle sicher, dass sie deiner Absicht entsprechen.
Für kritische Jobs richte Monitoring ein. Ein Cron-Ausdruck, der um ein Feld falsch ist, kann deinen täglichen Job stündlich ausführen – oder deinen stündlichen Job jährlich.
Alternativen zu Cron
Englische Syntax. Einige Scheduler akzeptieren „jeden Tag um 15 Uhr" statt 0 15 * * *. Klarer, aber weniger portabel.
Rate-Ausdrücke. AWS verwendet rate(5 minutes) neben Cron-Ausdrücken. Einfacher für simple Intervalle.
Systemd-Timer. Linux-Alternative zu Cron mit besserem Logging und Abhängigkeitsmanagement.
Cron-Ausdrücke sind dicht, aber erlernbar. Fünf Felder, jedes begrenzt, wann Jobs laufen. Teste deine Ausdrücke, beachte deine Zeitzonen, und du wirst alles zuverlässig planen.