Wie Sie Cron-Ausdrücke aufbauen

· 9 Min. Lesezeit

Cron-Ausdrücke sind die Standardweise, wiederkehrende Zeitpläne in Linux, Cloud-Plattformen, CI/CD-Pipelines und Task-Schedulern zu definieren. Die Syntax ist kompakt, aber nicht intuitiv: Ein visueller Cron-Generator zeigt Ihnen genau, wann Ihr Job läuft, fängt häufige Fehler vor dem Deployment ab und nimmt das Rätselraten aus dem fehleranfälligsten Teil der Automatisierung. Sobald Sie die fünf Felder, die Sonderzeichen und die häufigsten Fallstricke verstanden haben, können Sie jeden wiederkehrenden Zeitplan zuverlässig festlegen.

Eine kurze Geschichte des cron

Das erste cron stammt von Brian Kernighan in Version 7 Unix, um 1979. Es las jede Minute seine Konfiguration neu ein und führte aus, was fällig war. Paul Vixie schrieb es 1987 in das um, was heute Vixie cron heißt, die Version, die die meisten Linux-Distributionen noch ausliefern. Vixie cron fügte benutzerbezogene Crontabs, Umgebungsvariablen, das Schlüsselwort @reboot und mehrere Komfortfunktionen hinzu, die das Format auch für Nicht-Administratoren nutzbar machten.

Die 5-Feld-Syntax hat sich in über vierzig Jahren kaum verändert. Amazon EventBridge, Google Cloud Scheduler, Kubernetes CronJob, GitHub Actions, GitLab CI, Jenkins, Airflow, n8n und Dutzende anderer Systeme verarbeiten alle dasselbe kompakte Format mit nur kleinen Erweiterungen. Diese Stabilität ist der Grund, warum es sich lohnt, cron einmal zu lernen und nie wieder neu lernen zu müssen. Die Fähigkeit überträgt sich überall dorthin, wo Automatisierung nach Uhrzeit läuft.

Cron-Syntax

Ein Standard-Cron-Ausdruck hat 5 Felder, durch Leerzeichen getrennt. Jedes Feld steuert eine Zeitscheibe, und ein Job läuft, wenn jedes Feld zum aktuellen Moment passt.

┌───────────── Minute (0-59)
│ ┌───────────── Stunde (0-23)
│ │ ┌───────────── Tag des Monats (1-31)
│ │ │ ┌───────────── Monat (1-12 oder JAN-DEC)
│ │ │ │ ┌───────────── Wochentag (0-6, So=0, oder SUN-SAT)
│ │ │ │ │
* * * * *

Die Felder werden für Stunde, Minute und Monat per UND verknüpft, aber Tag-des-Monats und Wochentag werden in Vixie cron per ODER verknüpft. Das bedeutet, dass 0 12 1 * 1 sowohl am 1. jedes Monats ALS AUCH an jedem Montag mittags feuert, nicht nur an Montagen, die zufällig auf den 1. fallen. In diese Falle tappen fast alle beim ersten Mal.

Häufige Cron-Zeitpläne

Die Muster, zu denen Sie am häufigsten greifen werden:

ZeitplanAusdruckBedeutung
Jede Minute* * * * *Läuft alle 60 Sekunden
Alle 5 Minuten*/5 * * * *Um :00, :05, :10, :15...
Alle 15 Minuten*/15 * * * *Um :00, :15, :30, :45
Stündlich0 * * * *Zur vollen Stunde
Alle 2 Stunden0 */2 * * *Um 00:00, 02:00, 04:00...
Täglich um Mitternacht0 0 * * *Einmal pro Tag um 00:00
Täglich um 9 Uhr0 9 * * *Einmal pro Tag um 09:00
Zweimal täglich0 9,21 * * *Um 09:00 und 21:00
Jeden Montag 8 Uhr0 8 * * 1Wöchentlich montags
Werktags 18 Uhr0 18 * * 1-5Montag bis Freitag
1. jedes Monats0 0 1 * *Monatlich um Mitternacht am 1.
Jedes Quartal0 0 1 */3 *1. Jan, 1. Apr, 1. Jul, 1. Okt
Jeden Werktag morgens0 7 * * 1-507:00 Mo-Fr
Sonntag mittags0 12 * * 0Wöchentlich sonntags

Viele Systeme akzeptieren auch Kurzaliase, die sich zum entsprechenden 5-Feld-Ausdruck entfalten: @yearly, @monthly, @weekly, @daily, @hourly und @reboot. Sie sind knapp, aber nicht universell; prüfen Sie also Ihre Plattform, bevor Sie sich darauf verlassen.

So bauen Sie einen Cron-Ausdruck

  1. Wählen Sie die Granularität: Brauchen Sie jede Minute, jede Stunde, einmal am Tag, einmal pro Woche oder einmal pro Monat? Starten Sie mit der gröbsten Einstellung, die Ihren Bedarf deckt.
  2. Nutzen Sie die visuellen Steuerelemente: Wählen Sie Werte für Minute, Stunde, Tag, Monat und Wochentag aus den Dropdowns. Oder starten Sie mit einer Voreinstellung wie «stündlich» oder «täglich um Mitternacht» und passen Sie an.
  3. Prüfen Sie die nächsten Laufzeiten in der Vorschau: Der Generator zeigt die nächsten 5 Ausführungszeiten, sodass Sie bestätigen können, dass der Zeitplan dann feuert, wann Sie es erwarten.
  4. Plausibilisieren Sie die Zeitzone: Die Vorschau sollte zur Zeitzone des Servers oder Schedulers passen, der den Job ausführen wird, nicht zu Ihrer lokalen Zeit.
  5. Kopieren Sie den Ausdruck und fügen Sie ihn in Ihre crontab, Ihr GitHub-Actions-YAML, Ihre AWS-EventBridge-Regel oder den verwendeten Scheduler ein.
  6. Testen Sie zuerst mit einem kurzen Intervall, bevor Sie den finalen Zeitplan festschreiben. Ein schnelles */5 * * * * beweist, dass der Job feuert; wenn Sie zwei oder drei Läufe sehen, tauschen Sie den echten Ausdruck ein.

Sonderzeichen und Operatoren

Cron unterstützt einen kleinen, aber mächtigen Satz von Operatoren innerhalb jedes Feldes.

ZeichenBedeutungBeispiel
*Jeder Wert* * * * * = jede Minute
*/nJedes n-te*/15 * * * * = alle 15 Min
,Mehrere diskrete Werte0 8,12,18 * * * = 8, 12, 18 Uhr
-Inklusiver Bereich0 9-17 * * * = stündlich 9-17 Uhr
n-m/kBereich mit Schritt0 9-17/2 * * * = 9, 11, 13, 15, 17
?Kein spezifischer Wert (nur Quartz)0 0 ? * MON (Java-Scheduler)
LLetzter (AWS, Quartz)L im DoM = letzter Tag des Monats
WNächster Werktag (AWS, Quartz)15W = Werktag nahe am 15.
#N-ter Wochentag (AWS, Quartz)MON#2 = zweiter Montag des Monats
@hourlyKurzformGleich wie 0 * * * *

Klassisches Vixie cron unterstützt nur die ersten fünf Zeilen. Die fortgeschrittenen Operatoren (L, W, #, ?) stammen aus Quartz, der Java-Scheduling-Bibliothek, und wurden von AWS EventBridge und einigen anderen Cloud-Schedulern übernommen. Sie sind nicht portabel, also mischen Sie sie nicht mit Code, der auf einer generischen Linux-Maschine laufen muss.

Cron auf verschiedenen Plattformen

Cron ist eine Familie verwandter Syntaxen, kein einzelner Standard. Zu wissen, welchen Dialekt Ihr Scheduler spricht, spart Stunden Debugging.

PlattformFelderHinweise
Vixie cron (Linux)5Der Klassiker. */n, Bereiche, Listen, keine fortgeschrittenen Operatoren
BSD cron5Wie Vixie, aber leichte Umgebungs-Unterschiede
crontab.guru5Web-Parser, der Vixie-Semantik spiegelt
GitHub Actions5Vixie-Syntax, läuft in UTC, mindestens 5-Minuten-Auflösung
GitLab CI5Vixie-Syntax, läuft in der Instanz-Zeitzone
AWS EventBridge6Fügt Jahr hinzu. Wochentag nutzt 1-7 (So=1), unterstützt L/W/#
Google Cloud Scheduler5Vixie-Syntax plus Zeitzonen-Konfiguration
Kubernetes CronJob5Vixie-Syntax mit @-Kürzeln
Quartz (Java)6 oder 7Fügt Sekunden vorn hinzu und optional ein Jahr
systemd-TimerOnCalendar-FormatKein cron, löst aber dasselbe Problem mit klarerer Syntax

Wenn Sie einen Zeitplan schreiben, der auf mehr als einer Plattform laufen muss, halten Sie sich an die konservative 5-Feld-Teilmenge, die jedes System versteht. Greifen Sie nur dann zu L, W oder #, wenn Sie wissen, dass das Ziel sie unterstützt.

Häufige Fallstricke

Alternativen zu cron

Für manche Workloads beginnt die grobe Minutenauflösung von cron und das Fehlen einer Buchführung weh zu tun. Die häufigsten Upgrades:

WerkzeugStärkeWann wählen
systemd-TimerKlare OnCalendar-Syntax, persistent über Neustarts, integriert mit UnitsSie nutzen ohnehin systemd und wollen reichhaltigeres Logging
AnacronHolt verpasste Läufe nach Sleep nachLaptops oder Maschinen, die nicht immer eingeschaltet sind
Airflow / DagsterDAG-Abhängigkeiten, Retries, BeobachtbarkeitMehrstufige Datenpipelines
TemporalZustandsbehaftete Workflows, Exactly-once-GarantienLang laufende Orchestrierung über Dienste hinweg
AWS EventBridgeVerwaltet, integriert mit Lambda, S3, SQSAlles Cloud-Native auf AWS
GitHub ActionsKostenlos für öffentliche Repos, läuft auf gehosteten RunnernCI-nahe geplante Jobs
Serverless-Funktionen mit Cron-TriggernKein Server zu wartenLeichte Aufgaben, die in ein Lambda passen

Cron bleibt für die große Mehrheit einmaliger wiederkehrender Jobs die richtige Antwort. Die anderen Werkzeuge glänzen, wenn Sie Zustand, Retries, Abhängigkeiten oder Koordination über Maschinen hinweg brauchen.

Datenschutz und der Cron-Generator

Der Cron-Ausdrucksgenerator läuft vollständig in Ihrem Browser. Der Zeitplan, den Sie bauen, die Vorschau der nächsten Laufzeiten und der kopierte Ausdruck berühren unsere Server nie. Es gibt kein Log darüber, welche Ausdrücke generiert wurden, keine Telemetrie darüber, welche Voreinstellungen beliebt sind, und keine Möglichkeit für irgendjemanden, den Zeitplan zu rekonstruieren, an dem Sie gearbeitet haben. Cron-Ausdrücke sind auf den ersten Blick keine persönlichen Daten, aber der Zeitplan eines Jobs (ein nächtlicher Datenbankexport, ein wöchentlicher Abrechnungslauf, eine stündliche Synchronisation mit einem Partner) kann viel darüber verraten, wie ein Geschäft arbeitet. Diese Information clientseitig zu halten, vermeidet das versehentliche Durchsickern von Infrastrukturmustern an Dritte. Für eine Aufgabe, die so routiniert ist wie das Wählen eines Zeitplans, sollte die Datenschutzvorgabe der Sensibilität dessen entsprechen, was diese Zeitpläne repräsentieren.

Häufig gestellte Fragen

Wie sieht das Cron-Ausdrucksformat aus?

Ein Standard-Cron-Ausdruck hat 5 durch Leerzeichen getrennte Felder für Minute (0-59), Stunde (0-23), Tag des Monats (1-31), Monat (1-12) und Wochentag (0-6, wobei 0 Sonntag ist). Ein Sternchen (*) bedeutet „jeden" Wert in diesem Feld.

Was bedeutet */5 in Cron?

Die Syntax */5 bedeutet „alle 5". Im Minutenfeld steht */5 für alle 5 Minuten (0, 5, 10, 15…). Im Stundenfeld für alle 5 Stunden. Es funktioniert in jedem Feld.

Sind Cron-Ausdrücke auf allen Plattformen gleich?

Das 5-Feld-Format ist Standard in Linux-Cron, AWS EventBridge, GitHub Actions und den meisten Planungssystemen. Manche Plattformen ergänzen ein 6. Feld für Sekunden oder Jahr. Prüfen Sie die Dokumentation Ihrer Plattform.

Wie plane ich für den letzten Tag jedes Monats?

Standard-Cron hat kein „letzter Tag"-Schlüsselwort. Nutzen Sie einen Workaround wie tägliche Ausführung mit Datumscheck im Skript oder plattformspezifische Erweiterungen (AWS EventBridge unterstützt L für „last").

Why did my cron job not run at the expected time?

The most common cause is timezone confusion. Server cron usually runs in UTC, not your local time. Other causes include the server being asleep at the scheduled minute, the user crontab not being installed, or PATH/environment differences between your shell and cron's stripped-down environment.

What is the difference between 0 in the day-of-week field and 7?

Both 0 and 7 represent Sunday in classic Vixie cron, which uses 0-6 plus an alias for 7. Some implementations (notably AWS EventBridge) use 1-7 with Sunday as 7 and Monday as 1, so always check your platform's documentation before assuming.