Cron-Ausdruck: Syntax lesen und nächste Ausführungen berechnen

Cron-Ausdruck: Syntax lesen und nächste Ausführungen berechnen

Lesen Sie einen Cron-Ausdruck Feld für Feld, prüfen Sie die nächsten Ausführungen in UTC oder Ortszeit und meiden Sie Fallen bei Schritten und Zeitzonen.

16.10.2026
17 Min. Lektüre
Teilen Sie diesen Artikel:
CronZeitplanungZeitzoneDevOpsAnleitung

Ein Cron-Ausdruck wird Feld für Feld gelesen und an Daten geprüft

Eine Zeile wie */15 9-17 * * 1-5 steuert ein Backup, einen CI-Workflow oder einen Kubernetes-CronJob. Sie ist kurz, und kaum jemand liest sie ein zweites Mal. Wer ein Feld falsch liest, bekommt einen Job zur falschen Uhrzeit, doppelt oder gar nicht. Der Cron-Parser nimmt fünf Felder (Minute, Stunde, Tag des Monats, Monat, Wochentag) oder sechs, mit den Sekunden vorn. Er versteht auch Aliasse wie @daily und @hourly. Er zeigt einen Satz, der den Zeitplan zusammenfasst, und den Wert jedes Felds. Dazu nennt er die nächsten 5, 10 oder 25 Ausführungen, in UTC oder in der Zeitzone Ihres Browsers. Die Berechnung läuft in Ihrem Tab, und der Ausdruck wird an niemanden gesendet. Dieser Leitfaden erklärt Syntax und Aliasse und zeigt dann, wie Sie das Ergebnis lesen. Danach folgen die teuren Fallen. Dazu gehören Schritte, die nicht aufgehen, das ODER zwischen Tag des Monats und Wochentag, Daten, die es nicht gibt, die Zeitzone und die Zeitumstellung vom 25. Oktober 2026. Zum Schluss vergleicht er die Dialekte von crontab, Kubernetes, GitHub Actions und AWS EventBridge und rechnet alles noch einmal im Code nach. Verwandte Werkzeuge finden Sie im Hub der Entwickler-Utilities.

Fünf Standardfelder oder sechs mit den Sekunden vorn. Minute 0 bis 59, Stunde 0 bis 23, Tag des Monats 1 bis 31, Monat 1 bis 12 oder JAN bis DEC, Wochentag 0 bis 7 oder SUN bis SAT (0 und 7 sind beide Sonntag)
Listen (<code>1,15</code>), Bereiche (<code>9-17</code>) und Schritte (<code>*/15</code>, <code>10-50/10</code>). Namen von Monaten und Tagen gelten in Groß- wie in Kleinschreibung
Die Aliasse <code>@hourly</code>, <code>@daily</code>, <code>@midnight</code>, <code>@weekly</code>, <code>@monthly</code>, <code>@yearly</code> und <code>@annually</code>, im Eingabefeld durch ihre Form mit fünf Feldern ersetzt. <code>@reboot</code> wird abgelehnt
Ein Zusammenfassungssatz für die üblichen Zeitpläne (alle 15 Minuten, jeden Tag um 09:00, Montag bis Freitag), sonst die Aufschlüsselung Feld für Feld
Die nächsten 5, 10 oder 25 Ausführungen mit der Zeit bis zur ersten, in UTC oder in der Ortszeit des Browsers
Ein Hinweis, wenn Tag des Monats und Wochentag beide gesetzt sind: Eines von beiden löst die Ausführung aus
Kein Upload: Die Berechnung bleibt im Browser

Wofür der Parser taugt und wo er endet

Gute Einsatzfälle

Der Parser beantwortet eine einzige Frage: Zu welchen Zeitpunkten löst dieser Ausdruck aus? Damit prüfen Sie ihn, bevor Sie ihn ausrollen.

Die Zeile eines Kollegen oder eine alte crontab vor dem Kopieren noch einmal lesen, erst den Zusammenfassungssatz, dann die fünf Felder
Einen Schritt prüfen. <code>*/7</code> wiederholt den Job nicht alle 7 Minuten (siehe unten), und die nächsten Ausführungen zeigen es
Ein Monatsende wie <code>0 0 31 * *</code> prüfen, das die Monate mit 30 Tagen auslässt. Lassen Sie sich 25 Ausführungen zeigen, dann sehen Sie das Muster
Den Zeitplan in Ihrer Zeitzone lesen, indem Sie die Anzeige auf Lokal stellen, im Wissen, dass die Berechnung in UTC bleibt (siehe die Fehler unten)
Einen Alias in seiner Form mit fünf Feldern schreiben, bevor Sie ihn in ein Werkzeug ohne Makros einfügen, etwa GitHub Actions
Die Beschreibung oder die Liste der Ausführungen in ein Ticket oder ein Code-Review kopieren, damit der Prüfer zur Zeile auch die Daten sieht
Was zu anderen Werkzeugen gehört

Der Parser rechnet Daten aus. Den Rest der Kette prüfen Sie anderswo.

Die Epoch-Zahl aus einem Log oder einem Token in ein lesbares Datum umwandeln: der <a href="/de/unix-timestamp" class="text-primary hover:underline">Unix-Timestamp-Konverter</a>
Prüfen, ob ein Kubernetes-Manifest wohlgeformt ist: der <a href="/de/validate-kubernetes" class="text-primary hover:underline">Kubernetes-Validator</a>, vorgestellt im <a href="/de/blog/kubernetes-yaml-manifeste-online-validieren" class="text-primary hover:underline">Kubernetes-Leitfaden</a>
Prüfen, ob ein GitHub-Actions-Workflow wohlgeformt ist: der <a href="/de/validate-github-actions" class="text-primary hover:underline">GitHub-Actions-Validator</a>, vorgestellt im <a href="/de/blog/github-actions-workflow-yaml-linten" class="text-primary hover:underline">GitHub-Actions-Leitfaden</a>. Der <a href="/de/blog/gitlab-ci-yaml-formatieren-validieren" class="text-primary hover:underline">GitLab-CI-Leitfaden</a> tut dasselbe für <code>.gitlab-ci.yml</code>
Den Job selbst testen: Der Parser startet nichts, liest kein Log und weiß nicht, ob der Rechner lief
Die echte Ausführung überwachen: Ein richtiger Zeitplan beweist nicht, dass der Job lief. Dafür brauchen Sie Logs, einen Alarm oder eine Prüfung des letzten Erfolgs
Dialekt-Besonderheiten behandeln: Der Parser kennt weder <code>?</code> noch <code>L</code>, <code>W</code> und <code>#</code> und auch kein Jahresfeld
Eine einmalige Ausführung planen: Cron wiederholt, es kennt kein „einmal“. Dafür gibt es <code>at</code>

Ergebnisse richtig lesen

Das Ergebnis, Feld für Feld

Geben Sie den Ausdruck in den Cron-Parser ein. Die Daten unten beginnen am Freitag, dem 16. Oktober 2026, um 12:00 UTC. Das Werkzeug rechnet ab dem aktuellen Zeitpunkt, Ihre Daten sehen also anders aus.

<code>0 9 * * 1-5</code> ergibt den Satz „Um 09:00 an Werktagen (Mo–Fr)“. Die nächsten Ausführungen sind Montag, 19., Dienstag, 20., Mittwoch, 21., Donnerstag, 22. und Freitag, 23. Oktober, jeweils 09:00 UTC
<code>*/15 9-17 * * 1-5</code> hat keinen exakten Satz. Das Werkzeug schreibt „Zeitplan-Aufschlüsselung“, ergänzt einen Hinweis und nennt dann die fünf Felder und die Ausführungen: Freitag, 16. um 12:15, 12:30, 12:45, 13:00 und 13:15
Der letzte Start des Tages für <code>9-17</code> mit <code>*/15</code> ist 17:45. Der Stundenbereich umfasst die ganze Stunde 17, bis 17:59
Die fünf Kästchen geben jedes Feld so wieder, wie Sie es geschrieben haben. Nur Aliasse werden aufgelöst: <code>@daily</code> wird im Eingabefeld zu <code>0 0 * * *</code>
Der Wochentag akzeptiert 0 und 7 für Sonntag. <code>0 0 * * 7</code> und <code>0 0 * * 0</code> liefern dieselben Daten
Die Zeile „Nächster“ nennt die Zeit bis zur ersten Ausführung. Das reicht, um einen Ausdruck zu erkennen, der erst in sechs Monaten auslöst
Ein Schritt wird nicht ab der letzten Ausführung gezählt

Ein Schritt wird innerhalb des Wertebereichs des Felds berechnet. Zu Beginn jedes Bereichs fängt die Zählung bei null an.

<code>*/7 * * * *</code> löst bei den Minuten 0, 7, 14 und so weiter bis 56 aus und kehrt dann zu Minute 0 zurück: 12:49, 12:56, dann 13:00, also 4 Minuten später. Die Handbuchseite von crontab nennt denselben Fall mit <code>*/35</code>
<code>0 */5 * * *</code> löst um 0, 5, 10, 15 und 20 Uhr aus. Nach 20:00 kommt 00:00, der Abstand beträgt also 4 Stunden, nicht 5
<code>0 0 */2 * *</code> trifft die Tage 1, 3, 5 bis 31. Auf den 31. Oktober folgt der 1. November, also zwei Tage hintereinander
Für ein echtes „alle N Einheiten“ nehmen Sie ein N, das 60 (Minuten) oder 24 (Stunden) teilt, oder Sie zählen im Skript ab dem Zeitpunkt des letzten Erfolgs
Ein Schritt auf einem einzelnen Wert wie <code>20/15</code> beginnt bei diesem Wert und läuft bis zum Maximum des Felds: Minuten 20, 35 und 50
Wenn Tag des Monats und Wochentag zusammentreffen

Sind beide Felder gesetzt, verknüpft Cron sie nicht mit UND. Der Job läuft, wenn eines von beiden passt, so die Handbuchseite von crontab. Das Werkzeug weist mit einem Hinweis unter dem Zusammenfassungssatz darauf hin.

<code>0 0 1 * 1</code> löst am 1. des Monats und an jedem Montag aus. Die nächsten Ausführungen sind Montag, 19. und 26. Oktober, Sonntag, 1. November, dann Montag, 2. und 9. November
Den ersten Montag im Monat gibt es in Standard-Cron nicht. <code>1-7</code> für den Tag des Monats und <code>1</code> für Montag ergibt ein ODER und damit zu viele Ausführungen
Umweg: jeden Montag planen und das Datum im Befehl prüfen, mit <code>[ "$(date +\%d)" -le 7 ]</code>. In einer crontab schreibt man das %-Zeichen als <code>\%</code>
Steht eines der beiden Felder auf <code>*</code>, entscheidet das andere allein: <code>0 9 * * 1-5</code> hat kein ODER
Daten, die der Kalender nicht kennt

Ein gültiger Ausdruck kann trotzdem nie auslösen. Das Werkzeug sucht etwa zwei Jahre voraus und sagt es Ihnen.

<code>0 0 30 2 *</code> zielt auf einen 30. Februar: keine Ausführung. Das Werkzeug zeigt „Keine kommenden Läufe im Suchfenster“
<code>0 0 31 * *</code> löst nur in Monaten mit 31 Tagen aus. Ab dem 16. Oktober 2026 sind das der 31. Oktober und der 31. Dezember 2026, dann der 31. Januar, 31. März, 31. Mai, 31. Juli und 31. August 2027
<code>0 0 29 2 *</code> hat im Fenster nur ein Datum, den 29. Februar 2028. Das Werkzeug zeigt „Nur Teilergebnisse vor dem Suchlimit“, und das ist normal: Das nächste fällt ins Jahr 2032
Den letzten Tag des Monats gibt es in Standard-Cron nicht. Planen Sie vom 28. bis zum 31. und prüfen Sie im Befehl das Datum von morgen, zum Beispiel mit <code>[ "$(date -d tomorrow +\%d)" = 01 ]</code> (mit GNU <code>date</code>)

Vier Fehler, die man erst in Produktion sieht

Glauben, die Anzeige Lokal ändere die Zeitzone des Zeitplans

Der Parser rechnet immer in UTC. Die Option Lokal ändert nur, wie die gefundenen Daten geschrieben werden. 0 9 * * * ergibt 09:00 UTC, was das Werkzeug in einem auf Paris eingestellten Browser am 16. Oktober 2026 als 11:00 schreibt. Ein Cron auf einem Server in der Zeitzone Paris löst um 09:00 Pariser Zeit aus, das sind bis zum 24. Oktober 07:00 UTC und danach 08:00 UTC. Welche Zeitzone gilt, hängt vom System ab, das den Job ausführt. Der Cron-Daemon folgt der Zeitzone des Rechners. Ein Kubernetes-CronJob folgt der des kube-controller-manager, außer .spec.timeZone ist gesetzt. GitHub Actions zählt standardmäßig in UTC.

Die in Lokal angezeigte Uhrzeit für die Uhrzeit halten, zu der der Job auf dem Server läuft
Vergessen, dass Server, Container und Ihr Rechner nicht dieselbe Zeitzone haben müssen
Eine Ortszeit in ein System schreiben, das in UTC zählt
<code>CRON_TZ</code> oder <code>TZ</code> in das Feld <code>schedule</code> eines CronJobs setzen: Kubernetes lehnt die Ressource ab, weil die Zeitzone zu <code>.spec.timeZone</code> gehört und nicht in dieses Feld
Legen Sie die Zeitzone fest, bevor Sie die Uhrzeit schreiben. Um einen Zeitplan in Ortszeit zu prüfen, rechnen Sie die Uhrzeit von Hand in UTC um und lesen die Daten in UTC.
Eine feste Uhrzeit über eine Zeitumstellung laufen lassen

Europa wechselt am Sonntag, dem 25. Oktober 2026, auf die Winterzeit. Um 03:00 Uhr Sommerzeit ist es wieder 02:00 Uhr. Die USA stellen eine Woche später um, am 1. November. Ein Job mit 30 2 * * * trifft dann auf eine Stunde, die es beim Zurückstellen doppelt gibt und beim Vorstellen gar nicht. Die Implementierungen sind sich nicht einig. Die Debian-Handbuchseite zu cron(8) sagt, Jobs der übersprungenen Stunde liefen kurz nach der Umstellung, und Jobs der wiederholten Stunde würden nicht noch einmal ausgeführt. Die auf man7.org veröffentlichte Seite crontab(5) schreibt das Gegenteil. Eine Uhrzeit, die es nicht gibt, passt nie, und eine wiederholte Uhrzeit löst zweimal aus. GitHub Actions verschiebt mit dem Schlüssel timezone eine Ausführung aus der übersprungenen Stunde auf die nächste gültige Zeit.

Einen wichtigen Job zwischen 01:00 und 04:00 Ortszeit legen
Annehmen, ein täglicher Job laufe genau 24 Stunden nach dem vorigen
Auf einen einzigen Start setzen, obwohl die Stunde doppelt oder gar nicht vorkommen kann
Einen Job schreiben, der einen zweiten Start nicht verträgt
Planen Sie nach Möglichkeit in UTC, sonst zu einer Uhrzeit, die immer existiert, etwa 05:00, und schreiben Sie Jobs, die man gefahrlos wiederholen kann.
Einen Ausdruck aus einem anderen Dialekt einfügen

Derselbe Zeitplan wird je nach Werkzeug anders geschrieben. AWS EventBridge ergänzt ein Jahresfeld und verlangt ein ? in einem der beiden Tagesfelder. Quartz und Spring stellen die Sekunden an den Anfang. Der Parser lehnt ab, was er nicht kennt, und nennt Feld und Token, zum Beispiel „Ungültiger Wert in Tag des Monats (?)“.

<code>0 0 ? * MON-FRI *</code> aus EventBridge einfügen: sechs Felder bei der Einstellung auf fünf und ein <code>?</code>, das das Werkzeug nicht liest. <code>L</code>, <code>W</code> und <code>#</code> werden genauso abgelehnt
Einen Bereich über Mitternacht schreiben, etwa <code>22-2</code>: Der Anfang liegt hinter dem Ende, und das Werkzeug lehnt ihn ab. Schreiben Sie <code>22-23,0-2</code>
Auf sechs Felder umschalten, Sekunden ungleich 0 eintragen und wieder auf fünf zurückgehen: Der Rückweg wird verweigert, solange die Sekunden nicht 0 sind
Einen Alias außerhalb der Liste tippen, etwa <code>@reboot</code> oder <code>@every5m</code>, oder einen in GitHub Actions verwenden, das keinen kennt
Notieren Sie den Dialekt des Ziels, bevor Sie einen Ausdruck kopieren, und rechnen Sie Tage, Jahr und Sekunden von Hand um. Im Parser bleiben Sie bei der Form mit fünf Feldern.
Den Zeitplan prüfen und die Ausführung vergessen

Ein richtiger Ausdruck garantiert weder, dass der Job startet, noch, dass er nur einmal startet. Die Kubernetes-Dokumentation warnt, dass ein Job nur ungefähr zum geplanten Zeitpunkt angelegt wird. Es können zwei Jobs entstehen oder keiner, deshalb müssen Jobs idempotent sein. Die Standardrichtlinie für Parallelität heißt Allow und lässt einen Lauf starten, während der vorige noch arbeitet. Zählt der Controller mehr als 100 verpasste Starts, startet er den Job nicht mehr und protokolliert einen Fehler. GitHub Actions verzögert geplante Läufe bei hoher Last, vor allem zu Beginn jeder Stunde, und kann einzelne verwerfen. In einem öffentlichen Repository werden geplante Workflows nach 60 Tagen ohne Aktivität deaktiviert.

<code>0 * * * *</code> auf GitHub Actions planen, wo der Stundenanfang der meistbelastete Moment ist
<code>concurrencyPolicy: Allow</code> bei einem Job lassen, der länger dauert als sein Intervall
<code>startingDeadlineSeconds</code> nicht setzen und nach einem Ausfall des Controllers mehr als 100 verpasste Starts und gar keine Ausführung mehr haben
Sich auf einen geplanten Workflow in einem öffentlichen Repository verlassen, das keine Commits mehr bekommt
Wählen Sie eine versetzte Minute wie <code>17 * * * *</code>, setzen Sie <code>concurrencyPolicy: Forbid</code>, wenn sich zwei Läufe nicht überschneiden dürfen, und richten Sie einen Alarm auf den letzten Erfolg ein.

Felder, Aliasse und Dialekte auf einen Blick

Die fünf Felder

Jedes Feld nimmt dieselben Operatoren. Nur die Grenzen unterscheiden sich.

Minute: 0 bis 59
Stunde: 0 bis 23
Tag des Monats: 1 bis 31
Monat: 1 bis 12 oder JAN bis DEC
Wochentag: 0 bis 7 (0 und 7 sind beide Sonntag) oder SUN bis SAT
<code>*</code> steht für alle Werte, <code>,</code> trennt eine Liste, <code>-</code> zieht einen Bereich einschließlich der Grenzen (<code>8-11</code> ergibt 8, 9, 10 und 11) und <code>/</code> legt eine Schrittweite fest
Bei sechs Feldern stehen die Sekunden (0 bis 59) an erster Stelle
Die Aliasse

Ein Alias ersetzt den ganzen Ausdruck. Der Parser löst sie im Eingabefeld auf.

<code>@hourly</code> entspricht <code>0 * * * *</code>
<code>@daily</code> und <code>@midnight</code> entsprechen <code>0 0 * * *</code>
<code>@weekly</code> entspricht <code>0 0 * * 0</code>, also Sonntag um Mitternacht
<code>@monthly</code> entspricht <code>0 0 1 * *</code>
<code>@yearly</code> und <code>@annually</code> entsprechen <code>0 0 1 1 *</code>
<code>@reboot</code> hängt vom Start des Rechners ab und hat kein Datum: Der Parser lehnt es ab
GitHub Actions akzeptiert keinen dieser Aliasse
Derselbe Zeitplan in fünf Dialekten

Prüfen Sie vor dem Kopieren eines Ausdrucks, was das Ziel versteht.

Unix-crontab: fünf Felder, in der Zeitzone des Systems. Manche Implementierungen lesen zusätzlich eine Variable <code>CRON_TZ</code>
Kubernetes-CronJob: fünf Felder, <code>?</code> entspricht <code>*</code>, Aliasse erlaubt. Die Zeitzone setzen Sie mit <code>.spec.timeZone</code> (stabil seit Kubernetes 1.27), sonst gilt die des kube-controller-manager
GitHub Actions: fünf Felder in POSIX-Syntax, keine Aliasse, standardmäßig UTC, ein optionaler Schlüssel timezone laut Dokumentation, kürzestes Intervall 5 Minuten, Start nur vom Standard-Branch aus
AWS EventBridge: sechs Felder, <code>cron(Minute Stunde Tag-des-Monats Monat Wochentag Jahr)</code>, mit einem Pflicht-<code>?</code> in einem der beiden Tagesfelder. Die Operatoren <code>L</code>, <code>W</code> und <code>#</code> sind erlaubt. Geplante Regeln zählen in UTC
Quartz und Spring: sechs Felder, die Sekunden zuerst
Der FastMinify-Parser: fünf oder sechs Felder (Sekunden zuerst), Aliasse, Namen von Monaten und Tagen, sonst nichts

Der Cron-Parser Schritt für Schritt

Einen Ausdruck lesen

Der Cron-Parser analysiert beim Tippen, nach einer kurzen Pause. Die Schaltfläche Parsen oder die Eingabetaste im Feld startet die Berechnung ohne Wartezeit.

1

Tippen oder eine Voreinstellung wählen

Sechs Voreinstellungen füllen das Feld: alle 5 Minuten, alle 15 Minuten, stündlich, täglich um Mitternacht, werktags um 09:00 und monatlich am 1. Ein Alias wie @daily wird durch seine Form mit fünf Feldern ersetzt.

2

Den Satz lesen

Bei einfachen Zeitplänen fasst ein Satz den Ausdruck zusammen, zum Beispiel „Alle 15 Minuten“ oder „Um 09:00 an Werktagen (Mo–Fr)“. Sonst zeigt das Werkzeug „Zeitplan-Aufschlüsselung“ und überlässt Ihnen die Felder.

3

Die Kästchen prüfen

Jedes Kästchen trägt den Namen eines Felds und seinen Wert. Ein Hinweis erscheint, wenn Tag des Monats und Wochentag beide gesetzt sind, als Erinnerung, dass eines von beiden genügt.

4

Die nächsten Ausführungen lesen

Die Liste nennt die vollständigen Daten, dazu eine Zeile „Nächster“ mit der Zeit bis zur ersten Ausführung. Eine Warnung erscheint, wenn es kein Datum gibt oder die Suche endet, bevor sie genug gefunden hat.

Die Optionen einstellen

Drei Einstellungen unter dem Eingabefeld ändern, was das Werkzeug berechnet oder zeigt.

1

Fünf oder sechs Felder

Voreinstellung sind fünf Felder. Beim Wechsel auf sechs steht 0 vorn im Ausdruck, also Sekunden auf null. Beim Zurückgehen auf fünf entfällt diese Null, und das Werkzeug lehnt ab, solange die Sekunden etwas anderes als 0 sind.

2

Anzuzeigende Läufe

Wählen Sie 5, 10 oder 25. Nehmen Sie 25, um das Muster eines Schritts, eines Monatsendes oder zweier kombinierter Tagesfelder zu sehen.

3

Zeitzone

UTC ist die Voreinstellung. Lokal nutzt die Zeitzone Ihres Browsers. Ein Etikett über dem Satz erinnert an die Wahl. Die Berechnung bleibt in beiden Fällen in UTC, nur die Schreibweise der Daten ändert sich.

4

Kopieren

Beschreibung kopieren übernimmt den Satz, Alle kopieren die Liste, und jede Zeile hat eine eigene Schaltfläche Kopieren.

Eine Ablehnung verstehen

Lehnt das Werkzeug den Ausdruck ab, nennt es den Grund und berechnet nichts.

1

Leerer Ausdruck

Ein nach der Eingabe geleertes Feld zeigt „Geben Sie einen Cron-Ausdruck ein“.

2

Falsche Feldanzahl

„Ungültiger Cron-Ausdruck für die gewählte Feldanzahl“ weist auf vier Felder hin, oder auf sechs bei der Einstellung auf fünf. Ändern Sie die Einstellung oder korrigieren Sie die Token.

3

Ungültiger Wert

Eine Meldung wie „Ungültiger Wert in Stunde (22-2)“ nennt Feld und fehlerhaftes Token, und das Kästchen dieses Felds wird hervorgehoben.

4

Nicht unterstützter Alias

@reboot und jeder Alias außerhalb der Liste lösen eine Meldung aus, die die akzeptierten Aliasse nennt.

Dieselben Zeitpläne in crontab, Kubernetes, GitHub Actions und Node

Eine crontab-Zeile

Die Zeile gehört in crontab -e. Der Befehl nimmt den Rest der Zeile ein: Ein ungeschütztes % wird dort zum Zeilenumbruch, daher das \% im Beispiel (siehe die Handbuchseite von crontab). Cron führt Ihr Login-Profil nicht aus, geben Sie deshalb den vollen Pfad der Programme an.

Einfaches Beispiel

# m h dom mon dow command */15 9-17 * * 1-5 /usr/local/bin/sync.sh >> /var/log/sync.log 2>&1 0 2 * * * /usr/bin/tar -czf /backup/site-$(date +\%F).tar.gz /var/www # First Monday only: cron ORs day-of-month and day-of-week, so test the date in the command 0 9 * * 1 [ "$(date +\%d)" -le 7 ] && /usr/local/bin/monthly-report.sh
Ein Kubernetes-CronJob

Die Zeitzone steht in .spec.timeZone, nie in schedule. Prüfen Sie das Manifest mit dem Kubernetes-Validator, bevor Sie es anwenden.

Einfaches Beispiel

apiVersion: batch/v1 kind: CronJob metadata: name: nightly-report spec: schedule: "0 9 * * 1-5" # five fields, no CRON_TZ or TZ prefix timeZone: "Europe/Paris" # without it, the time zone of kube-controller-manager applies concurrencyPolicy: Forbid # skip a run while the previous one is still running startingDeadlineSeconds: 300 # do not start a run more than 5 minutes late jobTemplate: spec: template: spec: restartPolicy: OnFailure containers: - name: report image: registry.example.com/report:1.4.2 command: ["/app/run-report"]
Ein GitHub-Actions-Workflow

Der Workflow löst nur aus, wenn er im Standard-Branch liegt. Der GitHub-Actions-Validator prüft die Datei und der Cron-Parser die Daten.

Einfaches Beispiel

on: schedule: # Minute 17 avoids the busiest moment, the start of the hour. UTC by default. - cron: "17 7 * * 1-5" # Optional IANA time zone, as described in the GitHub documentation - cron: "30 5 * * 1-5" timezone: "America/New_York"
Die Bibliothek cron-parser mit Node

Um die nächsten Ausführungen in einer Zeitzone zu berechnen, wie es ein echtes Cron tut, übergeben Sie die Option tz. Das Beispiel nutzt Version 5 der Bibliothek. Es zeigt den Unterschied zum FastMinify-Parser, der in UTC rechnet: Dieselbe Zeile ergibt für eine Pariser Uhrzeit 07:00 UTC vor dem 25. Oktober 2026 und 08:00 UTC danach.

Einfaches Beispiel

import { CronExpressionParser } from 'cron-parser' // Same line, two zones: 09:00 UTC is not 09:00 in Paris const options = { currentDate: '2026-10-23T12:00:00Z', tz: 'Europe/Paris' } const paris = CronExpressionParser.parse('0 9 * * *', options) for (let i = 0; i < 3; i++) console.log(paris.next().toISOString()) // 2026-10-24T07:00:00.000Z (09:00 CEST, UTC+2) // 2026-10-25T08:00:00.000Z (09:00 CET, UTC+1: the clocks went back that night) // 2026-10-26T08:00:00.000Z const utc = CronExpressionParser.parse('0 9 * * *', { ...options, tz: 'UTC' }) console.log(utc.next().toISOString()) // 2026-10-24T09:00:00.000Z, what the parser tool shows

Zusammenfassung

Ein Cron-Ausdruck passt in fünf Felder, und fast jeder Fehler entsteht durch das, was man ihm nicht ansieht. Ein Schritt fängt bei null neu an, zwei Tagesfelder verbinden sich zum ODER, ein Datum existiert nicht, und eine Zeitzone oder Zeitumstellung verschiebt alles. Der Cron-Parser stellt Daten neben die Zeile, sodass Sie diese Fälle vor dem Ausrollen erkennen. Er rechnet in UTC, startet keinen Job und kennt nur die fünf oder sechs Felder und die gängigen Aliasse. Das Ziel zählt so viel wie der Ausdruck, denn crontab, Kubernetes, GitHub Actions, EventBridge und Quartz lesen nicht dieselbe Syntax. Schreiben Sie Jobs, die man gefahrlos wiederholen kann, und beobachten Sie ihren letzten Erfolg. Der Hub der Entwickler-Utilities versammelt die verwandten Werkzeuge.

Einen Cron-Ausdruck im Browser analysieren

Fügen Sie den Ausdruck in den Parser ein und lesen Sie die Daten zusätzlich zum Zusammenfassungssatz
Lassen Sie sich 25 Ausführungen zeigen, um das Muster eines Schritts, eines Monatsendes oder zweier kombinierter Tagesfelder zu sehen
Legen Sie die Zeitzone fest, bevor Sie die Uhrzeit schreiben, und schreiben Sie Jobs, die man gefahrlos wiederholen kann
Meiden Sie die Nacht der Zeitumstellung und den Stundenanfang für einen Job, auf den es ankommt
Notieren Sie den Dialekt des Ziels: Aliasse, Sekunden, Jahr und Zeitzone werden nicht überall gleich behandelt
Teilen Sie diesen Artikel
Teilen Sie diesen Artikel: