Zum Inhalt springen
Aback Tools Logo

Cron-Resolver: Cron-Ausdrücke verstehen

Wie man Cron-Ausdrücke liest, schreibt und validiert: Feld-für-Feld-Syntax, Sonderzeichen, gängige Zeitplan-Muster, Plattformunterschiede, typische Fallstricke und kostenlose Tools zum Auflösen und Simulieren von Zeitplänen.

DH
Tutorials & How-Tos12 Min. Lesezeit2,700 Wörter

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.

5Standard-Cron-FelderMinute, Stunde, Monatstag, Monat, Wochentag
15+Integrierte Zeitplan-Vorlagenim Crontab Expression Builder
12moSimulationshorizontim Interactive Cron Scheduler

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:

Cron-Ausdrucksformat
text
┌----------- Minute        (0-59)
│ ┌--------- Stunde          (0-23)
│ │ ┌------- Monatstag  (1-31)
│ │ │ ┌----- Monat         (1-12)
│ │ │ │ ┌--- Wochentag   (0-7, Sonntag = 0 oder 7)
│ │ │ │ │
* * * * *   auszuführender Befehl

Die 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

Einige Plattformen verwenden ein 6-Feld-Format, das an Position 0 (vor den Minuten) ein Sekundenfeld hinzufügt. Spring Scheduler und Quartz verwenden dieses Format. AWS EventBridge und die meisten Unix-cron-Daemons verwenden 5 Felder. Prüfen Sie immer, welches Format Ihre Zielplattform erwartet - ein für eine Plattform geschriebener Ausdruck kann auf einer anderen stillschweigend den falschen Zeitplan erzeugen.

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

Das ODER-Verhalten von Monatstag/Wochentag ist einer der häufigsten Cron-Fallstricke. „0 9 1 * 1" bedeutet NICHT „der erste Montag des Monats um 09:00 Uhr" - es bedeutet „09:00 Uhr am 1. des Monats, ODER 09:00 Uhr an einem beliebigen Montag". Verwenden Sie ein Skript oder einen verwalteten Scheduler mit kalenderbewusster Logik, wenn Sie echte „erster Montag des Monats"-Semantik benötigen.

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

ZeichenNameBeispielBedeutung
*Platzhalter* in MinuteJeder gültige Wert (0-59 bei Minuten)
,Liste1,15,30 in MinuteZu den Minuten 1, 15 und 30
-Bereich1-5 in WochentagMontag bis Freitag (Tage 1 bis 5)
/Schritt*/15 in MinuteAlle 15 Minuten (0, 15, 30, 45)
?Ohne Angabe? in MonatstagKein bestimmter Wert (nur Quartz/Spring)
@Makro@dailyKurzaliase (@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

Wenn Sie einen unbekannten Cron-Ausdruck lesen, parsen Sie jedes Feld von links nach rechts und übersetzen es unabhängig. Zuerst das Minutenfeld, dann die Stunde, dann der Monatstag, dann der Monat, dann der Wochentag. Lesen Sie jedes Feld ohne Sternchen als Einschränkung: „nur wenn Minute = X", „nur wenn Stunde = Y" usw. Zusammengesetzt in umgekehrter Reihenfolge von rechts nach links ergibt das einen vollständigen Satz.

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.

  1. "* * * * *" - Jede Minute. Der häufigste überhaupt mögliche Zeitplan. Für Heartbeat-Prüfungen und Monitoring.
  2. "*/5 * * * *" - Alle 5 Minuten. Üblich für Polling-Jobs und Cache-Warmer.
  3. "0 * * * *" - Jede volle Stunde. Standard für stündliche Batch-Prozesse.
  4. "0 0 * * *" - Täglich um Mitternacht (UTC). Der Standard für tägliche Aufräum-Jobs.
  5. "0 9 * * 1-5" - 9 Uhr an jedem Werktag. Standard-Zeitplan für Geschäftszeiten.
  6. "0 0 1 * *" - Mitternacht am 1. jedes Monats. Monatliche Abrechnungsläufe, Berichtserstellung.
  7. "0 0 1 1 *" - Mitternacht am 1. Januar. Jährliche Jobs - Lizenzverlängerungen, Jahresabschlussberichte.
  8. "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.

Open tool

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.

1

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.

2

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.

3

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.

4

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.

Open tool

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

PlattformFelderZeitzoneMakrosMindestintervall
Linux crontab5Systemlokal✓ Alle 6Jede Minute
GitHub Actions5Nur UTC✗ KeineAlle 5 Min (erzwungene 15-Min-Abweichung)
GitLab CI5Nur UTC✓ TeilweiseJede Minute
AWS EventBridge5 oder 6Nur UTC✗ KeineJede Minute
Google Cloud Scheduler5 oder unixBeliebige IANA-Zeitzone✓ EinigeJede Minute
Kubernetes CronJob5Cluster-Zeitzone✗ KeineJede Minute
Spring Scheduler6JVM-Standard✓ JaJede 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

Verlassen Sie sich bei zeitkritischen Aufgaben nie allein auf Cron für eine garantiert einmalige Ausführung. Cron-Daemons können eine Ausführung verpassen, wenn das System ausfällt, neu startet, unter hoher Last steht oder die Uhr verstellt wird. Für Finanztransaktionen sind idempotentes Job-Design und eine Job-Warteschlange mit Dead-Letter-Behandlung zuverlässiger als reine Cron-Planung.

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.

Häufige Fragen

A cron resolver is a tool that parses a cron expression and translates it into a human-readable schedule description and a list of the next scheduled run times. Given an expression like "0 9 * * 1-5", a resolver tells you "At 09:00 AM, Monday through Friday" and shows you the next five dates and times the job will fire. The Aback Tools Cron to Human-Readable Translator and Interactive Cron Scheduler both perform this resolution instantly in your browser without uploading anything to a server.

The five fields are minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-7, where both 0 and 7 represent Sunday). They run left to right in that order. The expression "30 8 * * 1" means "At 8:30 AM, every Monday." An asterisk (*) in any field means "every valid value for that field." Most standard crontab implementations use exactly these five fields; some extended formats (Spring Scheduler, Quartz) add a sixth seconds field at the start.

An asterisk (*) is the wildcard character in cron - it means "match every valid value for this field." In the minute field, * means every minute (0-59). In the hour field, * means every hour (0-23). In the day-of-week field, * means every day. So "* * * * *" runs every minute of every hour every day. It is the broadest possible value for any field. Use it when a field should not restrict the schedule rather than listing every value explicitly.

Range syntax specifies a span of consecutive values: "1-5" in the day-of-week field means Monday through Friday. Step syntax uses a forward slash to specify an interval: "*/15" in the minute field means every 15 minutes (0, 15, 30, 45). They can be combined: "0-30/10" means every 10 minutes from minute 0 to minute 30 (0, 10, 20, 30). Step syntax is commonly used to run jobs at regular intervals without listing every value explicitly.

Use the step syntax in the minute field: "*/5 * * * *". This expression fires at minutes 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, and 55 of every hour, every day. If you need to run every 5 minutes but only during business hours (9 AM to 5 PM, Monday to Friday), use "*/5 9-17 * * 1-5". Validate the expression in the Cron Expression Validator and preview the exact fire times in the Interactive Cron Scheduler before deploying.

Cron macros are shorthand aliases for common schedule expressions. The most widely supported are @reboot (run once at startup), @yearly or @annually ("0 0 1 1 *"), @monthly ("0 0 1 * *"), @weekly ("0 0 * * 0"), @daily or @midnight ("0 0 * * *"), and @hourly ("0 * * * *"). Support varies by scheduler - Linux crontab and most Unix cron daemons support all six; AWS EventBridge, Google Cloud Scheduler, and GitHub Actions do not support macro syntax. The Cron to Human-Readable Translator handles macros and expands them to their equivalent expressions.

The most common causes are timezone mismatch (cron runs in the server's local timezone, often UTC), off-by-one in day-of-week numbering (0 and 7 both mean Sunday on most systems, but not all), and the interaction between day-of-month and day-of-week fields (when both are non-wildcard, most cron implementations fire if EITHER condition is true, not both). Use the Interactive Cron Scheduler to simulate the exact fire times in UTC versus your expected timezone before concluding there is a bug.

Yes. GitHub Actions supports cron scheduling via the `schedule` trigger with a `cron:` key using standard 5-field cron syntax. GitHub Actions runs on UTC, so adjust your expression accordingly. Note that GitHub Actions does not support cron macros (@daily, @weekly, etc.) - use the full 5-field expression instead. Also, scheduled workflows may not run at exactly the specified time during periods of high load; expect up to 15 minutes of drift. The Crontab Expression Builder generates GitHub Actions-compatible expressions with next run time previews.

ShareXLinkedIn