Was ist ein Cron-Ausdruck?
Ein Cron-Ausdruck ist ein kompakter Zeitplan-String, der einem Job-Scheduler genau mitteilt, wann eine Aufgabe ausgeführt werden soll. Das Format entstand 1975 im Unix V7 cron-Daemon und hat sich seitdem kaum verändert — dieselbe fünfteilige Grammatik findet sich heute in Kubernetes CronJobs, AWS EventBridge, GitHub-Actions-Workflows, Google Cloud Scheduler, GitLab CI, Jenkins-Pipelines und dem crontab-Binary, das mit jeder Linux-Distribution ausgeliefert wird. Die Grammatik packt viel Bedeutung in dreizehn oder so Zeichen, weshalb ein Parser, der sie in verständliches Deutsch übersetzt, den Unterschied zwischen einem sicheren Deploy und einem 3-Uhr-Rollback ausmacht.
Wie funktioniert ein Cron-Ausdruck?
Ein Standard-Cron-Ausdruck hat fünf leerzeichen-getrennte Felder, die zusammen einen wiederkehrenden Zeitplan definieren. Die Engine überprüft jede Minute die aktuelle Uhrzeit gegen den Ausdruck und führt den Job aus, wenn alle fünf Felder übereinstimmen. Die Felder von links nach rechts:
- Minute (0–59). In welcher Minute der Stunde der Job läuft.
0bedeutet zur vollen Stunde,30zur halben Stunde,*/5alle fünf Minuten (00, 05, 10, ...) und15,45Viertel nach und Viertel vor. - Stunde (0–23). Welche Stunde des Tages im 24-Stunden-Format.
0ist Mitternacht,9ist 9 Uhr,17ist 17 Uhr. Bereiche (9-17für Bürozeiten) und Schrittangaben (*/2für jede zweite Stunde) funktionieren wie bei Minuten. - Tag des Monats (1–31). An welchem Kalendertag der Job läuft.
1bedeutet der 1. des Monats,*jeden Tag,1,15den 1. und den 15. Vorsicht mit31— dieser Wert wird in Monaten mit weniger als 31 Tagen still übersprungen. - Monat (1–12 oder JAN–DEC). In welchen Monaten der Job läuft.
*bedeutet jeden Monat,1,7Januar und Juli,1-3nur Q1. Dreistellige Monatsnamen sind in den meisten Implementierungen Groß-/Kleinschreibung-unempfindlich. - Wochentag (0–7, wobei 0 und 7 beide Sonntag bedeuten). Schränkt die Ausführung auf bestimmte Wochentage ein.
1-5ist Montag bis Freitag,0,6das Wochenende,MON-FRIfunktioniert in den meisten Parsern. Wenn sowohl Tag-des-Monats als auch Wochentag auf bestimmte Werte gesetzt sind, löst klassisches Cron bei beiden Übereinstimmungen aus (logisches ODER) — das überrascht Menschen jedes Mal.
Warum einen Cron-Ausdruck-Parser verwenden?
- Stilles Missverständnis vor dem Deploy erkennen. Der Ausdruck `0 2 */3 * *` läuft um 2 Uhr morgens jeden dritten Tag, nicht alle drei Minuten — hier einfügen und das in verständlichem Deutsch sehen, bevor er produktiv geht.
- Die meisten Cloud-Scheduler laufen standardmäßig in UTC. Die nächsten zehn Ausführungszeiten in der eigenen Zeitzone anzuzeigen, deckt die Stunden-Verschiebung durch Sommerzeit auf, bevor jemand um 3 Uhr morgens alarmiert wird.
- Kürzel wie `@daily`, `@weekly` und `@monthly` sind praktisch, aber mehrdeutig. Der Parser zeigt die zugrunde liegende fünfteilige Form, damit klar ist, was genau geplant wurde.
- Der Feld-für-Feld-Builder ermöglicht es, einen Zeitplan Spalte für Spalte aufzubauen und die Beschreibung live zu aktualisieren — deutlich schneller als die Cron-Manpage zum zehnten Mal zu lesen.
Wo werden Cron-Ausdrücke verwendet?
Cron-Syntax taucht überall auf, wo ein Job nach Uhr wiederholt werden soll. Drei der häufigsten Einsatzgebiete mit dem typischen Fallstrick jedes Einzelnen:
- Backup-Zeitpläne. Der klassische `crontab -e`-Eintrag, der jede Nacht um 2 Uhr eine Datenbank nach S3 sichert oder monatlich am 1. ein `pg_dump`-Archiv rotiert. Eine Zeile wie `0 2 * * * /usr/local/bin/backup.sh` läuft auf mehr Linux-Servern als jede andere Cron-Zeile. Minute und Stunde richtig setzen, stderr dauerhaft umleiten — und ein manuelles Aufgaben-Checkliste wird zum automatischen Script.
- GitHub-Actions `schedule`-Trigger. Der `on.schedule.cron`-Schlüssel in `.github/workflows/*.yml` akzeptiert Standard-Fünffeld-Cron, der Job läuft aber immer in UTC, und GitHub überspringt einen Feuerzeitpunkt still, wenn die Runner-Warteschlange beschäftigt ist. Gängiges Muster: `cron: '0 9 * * 1-5'` für einen Montag-bis-Freitag-Digest um 9 Uhr UTC. Hier zuerst in der eigenen Zeitzone prüfen, damit kein versprochener 9-Uhr-Berlin-Digest um 10 Uhr CEST ankommt.
- AWS EventBridge Scheduler. EventBridge-Cron-Ausdrücke nehmen ein sechstes Feld für das Jahr und erfordern `?` statt `*` in entweder dem Tag-des-Monats- oder dem Wochentag-Feld — `cron(0 9 ? * MON-FRI *)` ist die EventBridge-Übersetzung des klassischen Wochentag-9-Uhr-Ausdrucks. Verwendet für geplante Lambda-Aufrufe, ECS-Task-Starts und Step-Function-Starts; die Abweichung vom klassischen Cron-Format ist die häufigste Ursache für `ValidationException`-Fehler in CloudFormation-Deploys.
Wie sieht ein realer Cron-Ausdruck aus?
Nehmen Sie 0 9 * * 1-5 — läuft um 9:00 Uhr jeden Werktag. Die Felder von links nach rechts: 0 ist die nullte Minute der Stunde, 9 ist 9 Uhr, * bei Tag-des-Monats bedeutet jeden Kalendertag, * bei Monat bedeutet jeden Monat, und 1-5 bei Wochentag schränkt die Ausführung auf Montag bis Freitag ein (wobei 1 = Montag in der Standard-Cron-Nummerierung). Diesen Ausdruck in das Eingabefeld oben einfügen, und der Parser bestätigt Um 09:00 Uhr, Montag bis Freitag mit den nächsten zehn Ausführungsterminen in der gewählten IANA-Zone. Derselbe Ausdruck in AWS-EventBridge-Syntax lautet cron(0 9 ? * MON-FRI *) — mit dem Jahres-Feld am Ende und dem ? wo Standard-Cron * verwenden würde. Als Quartz-Ausdruck (sechsteilig mit führenden Sekunden): 0 0 9 ? * MON-FRI. Drei verschiedene Plattformen, drei verschiedene Formen, ein zugrundeliegender Zeitplan.
Cron-Ausdrücke sind auf genau eine Art ungnädig: Ein Tippfehler ergibt einen syntaktisch gültigen Zeitplan, der zur falschen Zeit läuft, ohne Fehler im Code-Review. `0 0 1 * *` zu lesen und zu wissen, dass es um Mitternacht am 1. jedes Monats läuft, nicht am 1. Januar, braucht Übung. Der Parser oben verwandelt diese Übung in einen Zehn-Sekunden-Plausibilitätstest — Ausdruck einfügen, Beschreibung lesen, die nächsten zehn Ausführungszeiten in der eigenen Zone überprüfen und das YAML mit dem Wissen deployen, dass die Cron-Zeile wirklich das tut, was die Commit-Nachricht sagt.
Was ist der Unterschied zwischen 5-Feld- und 6-Feld-Cron?
Fünffeld-Cron ist die klassische Unix-Grammatik mit Minutenauflösung. Sechsfeld-Cron fügt eine führende Sekunden-Spalte für Sub-Minuten-Zeitplanung hinzu — verwendet von Quartz und Springs @Scheduled. AWS EventBridge verwendet ebenfalls sechs Felder, aber die zusätzliche Spalte ist ein abschließendes Jahres-Feld, keine Sekunden.
Was bedeuten @hourly, @daily und @weekly?
Vixie-Cron-Kürzel aus dem Jahr 1987. @hourly = 0 * * * *, @daily = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *. @reboot läuft einmalig beim Systemstart. GitHub Actions und EventBridge lehnen diese Kürzel ab.
Ist Sonntag Tag 0 oder Tag 7 in Cron?
Beide, im klassischen Vixie-Cron — 0 und 7 werden akzeptiert, damit Bereiche wie 5-7 natürlich als Freitag-bis-Sonntag lesbar sind. Montag ist immer 1, Samstag immer 6. Quartz und AWS EventBridge verwenden eine andere Konvention: 1-7 mit Sonntag als 1. Plattformdokumentation prüfen, bevor man eine Annahme trifft.
Wie geht Cron mit der Sommerzeit um?
Das hängt von der Zeitzone der Engine ab. In UTC (Standard bei EventBridge, Kubernetes und GitHub Actions) gibt es keine Sommerzeit. In einer lokalen DST-Zone überspringt klassisches Vixie-Cron Jobs während der Vorwärtslücke im Frühling und führt sie während der Rückwärtssetzung im Herbst zweimal aus; systemd-Timer lösen genau einmal aus.