Cron-Ausdrücke wirken auf den ersten Blick kryptisch - fünf durch Leerzeichen getrennte Felder voller Sternchen, Zahlen, Schrägstriche und Kommas. Aber jedes Feld folgt einer konsistenten Logik, und einmal verstanden, werden das Lesen und Schreiben von Cron-Zeitplänen ganz einfach. Dieser Leitfaden zerlegt jeden Teil der Cron-Syntax, erklärt die Sonderzeichen, zeigt die gängigsten Zeitplan-Muster und stellt die Tools vor, die Cron-Ausdrücke vor dem Deployment auflösen, validieren und simulieren.
Was ist ein Cron-Ausdruck?
Ein Cron-Ausdruck ist eine Zeichenkette aus fünf (manchmal sechs) durch Leerzeichen getrennten Feldern, die einen wiederkehrenden Zeitplan für automatisierte Aufgaben definiert. Das Format wurde in den frühen 1970er Jahren zusammen mit dem Unix-cron-Daemon entwickelt und ist seitdem im Wesentlichen unverändert. Heute wird es in Linux-crontab-Dateien, in CI/CD-Pipelines wie GitHub Actions und GitLab CI, in Cloud-Schedulern wie AWS EventBridge und Google Cloud Scheduler, in Container-Orchestrierern wie Kubernetes CronJob sowie in Application-Frameworks wie Spring und Quartz verwendet.
Die Anatomie eines Cron-Ausdrucks
Das Standardformat mit fünf Feldern lautet:
┌----------- Minute (0-59)
│ ┌--------- Stunde (0-23)
│ │ ┌------- Monatstag (1-31)
│ │ │ ┌----- Monat (1-12)
│ │ │ │ ┌--- Wochentag (0-7, Sonntag = 0 oder 7)
│ │ │ │ │
* * * * * auszuführender BefehlDie Felder werden von links nach rechts gelesen: Minute, Stunde, Monatstag, Monat, Wochentag. Der Ausdruck „0 9 * * 1-5" löst jeden Werktag um 09:00 Uhr aus. Jedes Feld kann einen einzelnen Wert, eine kommagetrennte Liste, einen Bereich, einen Schritt, einen Platzhalter oder eine Kombination enthalten. Diese Operatoren zu verstehen ist die gesamte Kunst, Cron zu lesen.
Note
Cron-Syntax Feld für Feld
Jedes Feld hat einen definierten Bereich gültiger ganzzahliger Werte. Werte außerhalb des gültigen Bereichs erzeugen je nach Cron-Implementierung einen Fehler oder eine stillschweigende Fehlkonfiguration. Die gültigen Bereiche der Felder zu kennen ist die Grundlage zum Lesen jedes Cron-Ausdrucks.
Gültige Wertebereiche der Felder
- Minute - 0 bis 59. Der Wert 0 ist die volle Stunde; der Wert 59 ist eine Minute vor der nächsten vollen Stunde.
- Stunde - 0 bis 23. 24-Stunden-Format: 0 ist Mitternacht, 12 ist Mittag, 23 ist 23 Uhr.
- Monatstag - 1 bis 31. Tage sind 1-indexiert. Manche Monate haben weniger Tage - Februar hat 28 oder 29, April/Juni/September/November haben 30.
- Monat - 1 bis 12. Januar ist 1, Dezember ist 12. Manche Implementierungen akzeptieren auch dreibuchstabige Abkürzungen: JAN, FEB, MAR usw.
- Wochentag - 0 bis 7. Sowohl 0 als auch 7 stehen für Sonntag. Montag ist 1, Samstag ist 6. Manche Implementierungen unterstützen MON, TUE, WED, THU, FRI, SAT, SUN.
Wie die Felder zusammenwirken
Die fünf Felder werden gemeinsam als logisches UND ausgewertet - der Job läuft, wenn alle Felder ohne Platzhalter gleichzeitig zutreffen. „0 9 15 * *" löst genau um 09:00 Uhr am 15. jedes Monats aus. Die kritische Ausnahme: Sind sowohl Monatstag als auch Wochentag Werte ohne Platzhalter, lösen die meisten cron-Daemons aus, wenn ENTWEDER die eine ODER die andere Bedingung zutrifft (logisches ODER), nicht beide. Das ist eine berüchtigte Quelle unerwarteten Verhaltens.
Warning
Sonderzeichen erklärt
Die Macht von Cron kommt von seinen Sonderzeichen - den Operatoren, die feste Werte in flexible Zeitplan-Muster verwandeln. Wer diese sechs Operatoren beherrscht, deckt praktisch jedes Zeitplan-Muster ab, dem man begegnet.
Die sechs Kern-Operatoren
| Zeichen | Name | Beispiel | Bedeutung |
|---|---|---|---|
| * | Platzhalter | * in Minute | Jeder gültige Wert (0-59 bei Minuten) |
| , | Liste | 1,15,30 in Minute | Zu den Minuten 1, 15 und 30 |
| - | Bereich | 1-5 in Wochentag | Montag bis Freitag (Tage 1 bis 5) |
| / | Schritt | */15 in Minute | Alle 15 Minuten (0, 15, 30, 45) |
| ? | Ohne Angabe | ? in Monatstag | Kein bestimmter Wert (nur Quartz/Spring) |
| @ | Makro | @daily | Kurzaliase (@daily = 0 0 * * *) |
Operatoren kombinieren
Operatoren können innerhalb eines Feldes kombiniert werden. „0,30 9-17 * * 1-5" bedeutet „zu den Minuten 0 und 30 jeder Stunde von 9 bis 17 Uhr, Montag bis Freitag". Die Schrittsyntax lässt sich auch auf Bereiche anwenden: „0-30/5" im Minutenfeld bedeutet alle 5 Minuten von Minute 0 bis Minute 30 (0, 5, 10, 15, 20, 25, 30). Der Cron-zu-Text-Übersetzer zerlegt jede Kombination in verständliche Sprache mit Erklärungen Feld für Feld.
Tip
Gängige Cron-Zeitplan-Muster
Die Mehrheit der realen Cron-Zeitpläne fällt auf eine Handvoll wiederkehrender Muster. Wer diese Muster kennt, kann die meisten Produktions-crontabs ohne Nachschlagen lesen.
- "* * * * *" - Jede Minute. Der häufigste überhaupt mögliche Zeitplan. Für Heartbeat-Prüfungen und Monitoring.
- "*/5 * * * *" - Alle 5 Minuten. Üblich für Polling-Jobs und Cache-Warmer.
- "0 * * * *" - Jede volle Stunde. Standard für stündliche Batch-Prozesse.
- "0 0 * * *" - Täglich um Mitternacht (UTC). Der Standard für tägliche Aufräum-Jobs.
- "0 9 * * 1-5" - 9 Uhr an jedem Werktag. Standard-Zeitplan für Geschäftszeiten.
- "0 0 1 * *" - Mitternacht am 1. jedes Monats. Monatliche Abrechnungsläufe, Berichtserstellung.
- "0 0 1 1 *" - Mitternacht am 1. Januar. Jährliche Jobs - Lizenzverlängerungen, Jahresabschlussberichte.
- "0 0 * * 0" - Mitternacht jeden Sonntag. Wöchentliche Wartungsfenster.
Eigene Zeitpläne aus Mustern aufbauen
Die meisten komplexen Zeitpläne sind Kombinationen dieser Muster. „0 2 * * 6,0" bedeutet „2 Uhr nachts an Samstag und Sonntag" - das Wartungsfenster am Wochenende. „*/10 8-18 * * 1-5" bedeutet „alle 10 Minuten von 8 bis 18 Uhr, nur an Werktagen". Wenn Sie den Ziel-Zeitplan in normaler Sprache kennen, können Sie mit dem Crontab Expression Builder jedes Feld visuell konfigurieren und erhalten den korrekten Ausdruck mit einer lesbaren Bestätigung und den nächsten fünf Ausführungszeitpunkten.
Crontab Expression Builder
Cron-Ausdrücke visuell erstellen mit 15 Vorlagen, 5 Feldmodi, sofortiger Klartext-Beschreibung und Vorschau der nächsten 5 Ausführungen - kostenlos, keine Registrierung.
Cron-Ausdrücke erstellen und validieren
Einen Cron-Ausdruck von Grund auf zu schreiben und auf Korrektheit zu hoffen, ist riskant. Ein einziges vertauschtes Feld oder ein missverstandener Operator kann dazu führen, dass ein Job zu völlig falschen Zeiten ausgelöst wird - oder nie. Diese Tools beseitigen dieses Risiko.
Ausdruck schreiben oder auswählen
Öffnen Sie den Crontab Expression Builder und geben Sie Ihren Ausdruck entweder direkt ein oder wählen Sie eine der 15 integrierten Vorlagen. Jede Vorlage deckt ein gängiges Zeitplan-Muster ab (jede Minute, stündlich, täglich, Werktage, monatlich) und lässt sich über die visuellen Feldsteuerungen anpassen, ohne den Rohausdruck anzufassen.
Auf Syntaxfehler validieren
Fügen Sie den Ausdruck in den Cron-Ausdruck-Validator ein. Er prüft jedes Feld gegen seinen gültigen Bereich, validiert Bereichsgrenzen (der Anfang muss kleiner als das Ende sein), bestätigt, dass Schrittwerte ungleich null sind, und markiert Makros, die vom Standard-crontab mit 5 Feldern nicht unterstützt werden. Jeder Fehler enthält eine Meldung auf Zeilenebene, die erklärt, was der Parser erwartet hat.
In Klartext übersetzen
Führen Sie den validierten Ausdruck durch den Cron-zu-Text-Übersetzer. Die Ausgabe ist ein vollständiger Satz in verständlicher Sprache, der den Zeitplan beschreibt - „Um 2:30 Uhr, an Montag, Mittwoch und Freitag" - plus eine Aufschlüsselung Feld für Feld. Wenn die Beschreibung nicht Ihrer Absicht entspricht, überarbeiten Sie den Ausdruck vor dem Deployment.
Die nächsten 12 Monate an Ausführungen simulieren
Für geplante Jobs, bei denen das Timing zählt - Abrechnungsläufe, Datenexporte, Wartungsfenster - öffnen Sie den Interactive Cron Scheduler und simulieren Sie den Ausdruck über die nächsten 12 Monate. Die Kalenderansicht zeigt die monatliche Ausführungsdichte, die Zeitleiste zeigt exakte Zeitstempel. Bestätigen Sie, dass der Zeitplan an den erwarteten Tagen auslöst, bevor Sie die Konfiguration in die Produktion übernehmen.
Cron-Ausdruck-Validator
Validieren Sie 5-Feld-Cron-Syntax, Bereiche, Schritte, Listenwerte und Makros mit sofortigen Diagnosen auf Feldebene - lokal im Browser, kostenlos, keine Registrierung.
Cron in CI/CD und Cloud-Schedulern
Cron-Syntax wird weit über den Linux-crontab hinaus verwendet. Moderne CI/CD- und Cloud-Plattformen haben alle dasselbe 5-Feld-Format übernommen, aber jede hat ihre eigenen Besonderheiten bei der Zeitzonenbehandlung, der Makro-Unterstützung und den Beschränkungen des Mindestintervalls.
Unterschiede von Plattform zu Plattform
| Plattform | Felder | Zeitzone | Makros | Mindestintervall |
|---|---|---|---|---|
| Linux crontab | 5 | Systemlokal | ✓ Alle 6 | Jede Minute |
| GitHub Actions | 5 | Nur UTC | ✗ Keine | Alle 5 Min (erzwungene 15-Min-Abweichung) |
| GitLab CI | 5 | Nur UTC | ✓ Teilweise | Jede Minute |
| AWS EventBridge | 5 oder 6 | Nur UTC | ✗ Keine | Jede Minute |
| Google Cloud Scheduler | 5 oder unix | Beliebige IANA-Zeitzone | ✓ Einige | Jede Minute |
| Kubernetes CronJob | 5 | Cluster-Zeitzone | ✗ Keine | Jede Minute |
| Spring Scheduler | 6 | JVM-Standard | ✓ Ja | Jede Sekunde |
Cron-Planung mit GitHub Actions
GitHub Actions verwendet die Standard-Cron-Syntax mit 5 Feldern, läuft aber immer in UTC. Wenn Sie einen Job um 9 Uhr Eastern Time (UTC-5) möchten, schreiben Sie „0 14 * * *". GitHub Actions unterstützt auch keine Makro-Syntax (@daily, @weekly), verwenden Sie also den vollständigen Ausdruck. Geplante Workflows können bei hoher Last bis zu 15 Minuten später ausgelöst werden - entwerfen Sie Ihre Jobs tolerant gegenüber dieser Abweichung.
Cron in systemd-Timer konvertieren
Moderne Linux-Systeme verwenden zunehmend systemd-Timer statt des klassischen crontabs. Das OnCalendar-Format von systemd verwendet eine andere Syntax, deckt aber dieselben Muster ab. Der Cron-zu-Systemd-Timer-Konverter wandelt jeden 5-Feld-Cron-Ausdruck in die entsprechende systemd-Timer-Unit-Konfiguration um, inklusive einer vollständigen .timer- und .service-Dateivorlage.
Cron-Fallstricke und Grenzfälle
Selbst erfahrene Entwickler erleben mit Cron stille Fehler. Dies sind die häufigsten Fallstricke - jeder einzelne hat Produktionssystemen unbemerkte Ausfallzeit oder doppelte Job-Ausführungen gekostet.
Zeitzonen-Überraschungen
Cron läuft standardmäßig in der lokalen Zeitzone des Servers. Läuft Ihr Server in UTC, aber Ihr Geschäft in New York (UTC-5), löst „0 9 * * *" um 4 Uhr Ortszeit aus, nicht um 9 Uhr. Cloud-Plattformen wie GitHub Actions und AWS EventBridge laufen immer in UTC, womit die gesamte Zeitzonenrechnung bei Ihnen liegt. Bestätigen Sie immer die Zeitzone, bevor Sie einen Zeitplan deployen. Der Interactive Cron Scheduler erlaubt es, Ausführungen mit angewandtem Zeitzonen-Offset zu simulieren.
Grenzfälle am Monatsende
Plant man einen Job für den 29., 30. oder 31., überspringt dieser stillschweigend die Monate, die dieses Datum nicht haben. „0 0 31 * *" läuft nie im April, Juni, September oder November. „0 0 29 2 *" läuft im Februar nur in Schaltjahren. Wenn Sie einen Zeitplan für den „letzten Tag des Monats" benötigen, brauchen Sie einen schlaueren Ansatz - entweder täglich mit einem Skript laufen lassen, das das Datum prüft, oder einen Cloud-Scheduler verwenden, der die L-Syntax (letzter Tag) unterstützt.
Sommerzeit-Umstellungen
Umstellungen der Sommerzeit können dazu führen, dass Cron-Jobs doppelt laufen oder übersprungen werden. Wenn die Uhren vorgestellt werden, treten Zeiten in der übersprungenen Stunde nie auf. Werden die Uhren zurückgestellt, treten Zeiten in der wiederholten Stunde zweimal auf. Jobs, die in einer lokalen Zeitzone innerhalb des Umstellungsfensters geplant sind, sind betroffen. Am sichersten fahren Server und Scheduler in UTC, das nie Sommerzeit-Umstellungen hat.
Warning
Das Jede-Sekunde-Problem
Der Standard-Cron mit 5 Feldern hat eine Mindestauflösung von einer Minute. Wenn ein Job alle 10 Sekunden laufen soll, ist Cron nicht das richtige Werkzeug - verwenden Sie einen System-Timer, eine Job-Warteschlange mit Verzögerungen oder das Sekundenfeld von Spring Scheduler und Quartz. Sub-Minuten-Zeitpläne mit mehreren crontab-Einträgen anzunähern ist fehleranfällig und erzeugt Race Conditions, wenn sich Jobs überlappen.
Key takeaways
- Ein Cron-Ausdruck hat fünf Felder: Minute (0-59), Stunde (0-23), Monatstag (1-31), Monat (1-12), Wochentag (0-7).
- Die sechs Sonderzeichen sind * (Platzhalter), , (Liste), - (Bereich), / (Schritt), ? (ohne Angabe, nur Quartz) und @ (Makros wie @daily).
- Wenn sowohl Monatstag als auch Wochentag ohne Platzhalter sind, lösen die meisten cron-Daemons aus, wenn ENTWEDER das eine ODER das andere zutrifft - eine häufige Quelle unerwarteter Doppelausführungen.
- Verwenden Sie den Crontab Expression Builder zum visuellen Erstellen, den Cron-Ausdruck-Validator zur Syntaxprüfung und den Interactive Cron Scheduler zur Simulation von 12 Monaten Ausführungen.
- GitHub Actions nutzt 5-Feld-Cron nur in UTC ohne Makro-Unterstützung; AWS EventBridge und Google Cloud Scheduler ebenfalls UTC; der Linux-crontab nutzt die System-Zeitzone.
- Planen Sie nicht auf den 29., 30. oder 31., wenn der Job jeden Monat laufen soll - diese Tage existieren nicht in jedem Monat.
- Standard-Cron hat eine Mindestauflösung von einer Minute; für Sub-Minuten-Bedarf systemd-Timer, Job-Warteschlangen oder Spring/Quartz verwenden.