Skip to content

Data study

Cron-Ausdruck-Muster: Welche Zeitpläne nutzen Entwickler wirklich?

'* * * * *' ist der meistgegoogelte Cron-Ausdruck. Er ist auch derjenige, der am ehesten Ihren Server in Brand setzt.

By Published

Cron ist eines der ältesten noch aktiv genutzten Scheduling-Systeme — der ursprüngliche Unix-Cron-Daemon stammt aus Version 7 Unix (1979) und die Fünf-Felder-Syntax ist in POSIX.1 (IEEE Std 1003.1) spezifiziert. Trotz jahrzehntelanger Alternativen (systemd-Timer, Kubernetes-CronJobs, Cloud-Scheduler) bleibt der Fünf-Felder-Cron-Ausdruck die Lingua franca geplanter Aufgaben.

Diese Analyse aggregiert die Häufigkeit von Cron-Ausdrücken aus Stack-Overflow-Fragen mit dem Tag „cron“, GitHub-Codesuche über öffentliche Repositories und Entwickler-Umfrageantworten. Ziel ist es, zu dokumentieren, welche Zeitpläne Entwickler in der Praxis tatsächlich verwenden — nicht, was in Lehrbüchern dokumentiert ist.

Die Fünf-Felder-POSIX-Cron-Syntax

Gemäß POSIX crontab(5) hat ein Cron-Ausdruck fünf Felder:

┌───────────── Minute (0–59)
│ ┌───────────── Stunde (0–23)
│ │ ┌───────────── Tag des Monats (1–31)
│ │ │ ┌───────────── Monat (1–12)
│ │ │ │ ┌───────────── Wochentag (0–7, wobei 0 und 7 = Sonntag)
│ │ │ │ │
* * * * *

Ein sechstes Feld (Sekunden) ist nicht Teil des POSIX-Standards, wird aber von vielen modernen Schedulern unterstützt (Spring @Scheduled, Quartz, AWS EventBridge). Ein siebtes Feld (Jahr) erscheint in Quartz und einigen Enterprise-Schedulern. Diese Analyse behandelt die standardmäßige Fünf-Felder-Syntax, sofern nicht anders vermerkt.

Die 20 häufigsten Cron-Muster

RangAusdruckMenschenlesbarer ZeitplanTypischer AnwendungsfallProduktionsreif?
1* * * * *Jede MinuteTests, Heartbeat-Checks, Polling von QueuesSelten — 1.440 Läufe/Tag; die meisten Jobs brauchen Idempotenz-Garantien
20 * * * *Jede Stunde, zur Minute :00Cache-Warm-up, Metrik-Aggregation, stündliche BerichteJa — gut verstandene Taktung, geringe Auswirkungsfläche
30 0 * * *Täglich um Mitternacht (Serverzeit)Tägliche Datenbank-Backups, Batch-Jobs, Cleanup-SkripteJa, mit Vorbehalt — Mitternacht Serverzeit ≠ Mitternacht Nutzerzeit; Zeitzone muss explizit sein
4*/5 * * * *Alle 5 MinutenHealth-Checks, Short-Polling-Feeds, Retry-QueuesOft — 288 Läufe/Tag; akzeptabel, wenn jeder Lauf schnell und idempotent ist
5*/15 * * * *Alle 15 MinutenDatensynchronisation, Wechselkurs-Updates, SensorwerteJa — 96 Läufe/Tag, ausgewogene Taktung
60 9 * * 1-5Werktags um 09:00Benachrichtigungen während der Geschäftszeiten, tägliche Stand-up-ErinnerungenJa — gängiges Muster; auf Sommerzeit-Verschiebungen im Frühling/Herbst achten
70 0 1 * *Erster Tag jedes Monats um MitternachtMonatliche Abrechnung, Rechnungserstellung, Archiv-RotationJa — geringe Frequenz; Monatsende- vs. Monatsanfang-Semantik bei der Abrechnung prüfen
830 23 * * *Täglich um 23:30Tagesabschlussberichte, Batches vor MitternachtJa — die Wahl von Schwachlastzeiten reduziert Ressourcenkonkurrenz
90 2 * * *Täglich um 02:00Wartung im Schwachlastfenster, Reindexierung, VacuumingJa — beliebtes Schwachlastfenster in US-/EU-Zeitzonen
10*/30 * * * *Alle 30 MinutenSession-Cleanup, Cache-Invalidierung, Log-RotationJa — 48 Läufe/Tag, praktische Balance
110 0 * * 0Sonntags um MitternachtWöchentliche Reindexierung, vollständige Backups, Abhängigkeits-UpdatesJa — Sonntag Mitternacht ist ein übliches Wartungsfenster
120 12 * * *Täglich um die MittagszeitMittagsberichte, Schwachlastfenster zur MittagszeitJa — beachten Sie, dass „Mittag“ in verschiedenen Zeitzonen verschiedene Uhrzeiten bedeutet
130 0 1 1 *1. Januar um MitternachtJährliche Archiverstellung, Erstellung von JahresberichtenJa — Jobs einmal pro Jahr; sicherstellen, dass der Job nicht versehentlich beim Testen ausgelöst wird
14*/10 * * * *Alle 10 MinutenQueue-Drain, Polling von APIs mit Rate-Limits, StatusprüfungenOft — 144 Läufe/Tag; sicherstellen, dass der Job innerhalb von 10 Minuten abschließt
150 6 * * 1Montags um 06:00Wöchentliche Newsletter, Wochenanfang-ZusammenfassungenJa — gängiges Muster der Geschäftskommunikation
160 0 15 * *15. jedes Monats um MitternachtAbrechnungszyklen zur Monatsmitte, GehaltsabrechnungJa — fester Anker zur Monatsmitte, vorhersehbar
1759 23 * * *Täglich um 23:59Tagesabschluss-Snapshots, „letzter Moment“-SummenRiskant — 1 Minute vor Mitternacht; Race Conditions mit täglichen Reset-Jobs um 00:00
180 0 * * 1-5Werktag-MitternächteGeschäftstägliche Batch-Verarbeitung, nächtliches ETL ohne WochenendenJa — klare Semantik; Wochenstart-Konvention prüfen (0=Sonntag vs. 1=Montag)
190 8,12,18 * * *Täglich um 08:00, 12:00, 18:00Periodische Benachrichtigungen, Polling zu mehreren TageszeitenJa — Komma-Syntax ist Standard-POSIX; testen, dass der Scheduler sie unterstützt
200 0 L * *Letzter Tag jedes Monats um MitternachtMonatsendberichte, Abschluss von GeschäftsperiodenNicht-POSIX — „L“ ist eine Quartz-Erweiterung; Scheduler-Unterstützung vor Nutzung prüfen

Das „jede Minute“-Problem

* * * * * ist der einzelne meistgesuchte Cron- Ausdruck auf Stack Overflow — er erscheint in der Mehrzahl der Tutorials „Wie schreibe ich einen Cron-Ausdruck?“ als einfachstes Beispiel. Daraus entsteht ein häufiger Fehler: Entwickler kopieren ihn in die Produktion, ohne zu verstehen, dass er 1.440 Mal pro Tag feuert.

Das Produktionsrisiko von Jede-Minute-Crons:

  • Überlappende Ausführungen. Wenn der Job länger als 60 Sekunden dauert, startet die nächste Instanz, bevor die erste fertig ist. Ohne Mutex oder Idempotenz-Garantie können zwei Instanzen gemeinsamen Zustand korrumpieren.
  • Thundering Herd. Viele Dienste werden mit demselben * * * * *-Cron deployt; alle Instanzen feuern gleichzeitig zur selben Wanduhr-Minute und erzeugen Datenbankspitzen.
  • Stille Akkumulation. Ein Job, der stets erfolgreich ist, aber Artefakte hinterlässt (Temp-Dateien, offene Verbindungen, Log-Einträge), häuft 2 Mio. Artefakte pro Jahr an.

Für Polling- oder Health-Check-Anwendungsfälle ist */5 * * * *(alle 5 Minuten) oder */15 * * * * (alle 15 Minuten) fast immer ausreichend und 5–15× weniger ressourcen- intensiv.

Das produktionsstabilste Muster: 0 * * * *

Stündliche Crons zur vollen Stunde verbinden drei Eigenschaften:

  1. Geringe Frequenz (24/Tag). Wenn ein einzelner Lauf scheitert oder länger dauert als erwartet, gibt es 23 weitere Läufe zur Erholung vor dem nächsten Tag.
  2. Menschenlesbar. „Läuft jede Stunde“ ist in einer Vorfallsanalyse sofort verständlich; „läuft alle 37 Minuten“ erfordert Kopfrechnen.
  3. An natürlichen Aggregationsfenstern ausgerichtet. Stündliche Jobs erzeugen stündliche Daten, die sich sauber zu täglichen, wöchentlichen und monatlichen Zusammenfassungen aggregieren.

Nicht-standardisierte Erweiterungen, die man kennen sollte

Mehrere häufig in Cron-Ausdrücken gesehene Features sind nicht Teil des POSIX-crontab(5)-Standards und werden möglicherweise nicht von allen Schedulern unterstützt:

  • Sekundenfeld — nicht POSIX. Unterstützt von Spring @Scheduled, Quartz, GitHub Actions (mit der erweiterten Syntax). AWS EventBridge nutzt ein Sechs-Felder-Format, bei dem das erste Feld Minuten sind, nicht Sekunden.
  • L (last) — Quartz-Erweiterung für „letzter Tag des Monats“ (L) oder „letzter bestimmter Wochentag“ (5L = letzter Freitag).
  • W (nächster Werktag) — Quartz-Erweiterung:15W = nächster Werktag zum 15.
  • # (N-ter Wochentag) — Quartz-Erweiterung:2#3 = dritter Montag des Monats.
  • ? (kein bestimmter Wert) — Quartz nutzt ? im Tag-des-Monats- oder Wochentag-Feld, um den Konflikt der gleichzeitigen Angabe beider zu vermeiden. POSIX nutzt * für beide.

Im Zweifel testen Sie den Ausdruck gegen die Dokumentation Ihres Ziel-Schedulers. Die POSIX-Fünf-Felder- Syntax ist die sicherste portable Teilmenge.

Zeitzonen-Fallen

POSIX-Cron läuft in der lokalen Zeitzone des Servers. „Täglich um Mitternacht“ (0 0 * * *) bedeutet Mitternacht in der Zeitzone, für die der Server konfiguriert ist — die von der Zeitzone des Nutzers, der Daten oder des Unternehmens abweichen kann. UTC-Server sind am wenigsten überraschend; wenn Sie Lokalzeit- Semantik brauchen, nutzen Sie einen Scheduler, der benannte Zeitzonen unterstützt (systemd-Timer mit OnCalendar und TimeZone=, Kubernetes- CronJob spec.timeZone, AWS-EventBridge-Schedule-Ausdrücke mit Zeitzone).

Die Sommerzeit bringt eine weitere Komplikation: Zweimal im Jahr wird die lokale Mitternacht entweder übersprungen (Vorstellen) oder tritt zweimal auf (Zurückstellen). Ein Täglich-um-Mitternacht-Cron kann an Sommerzeit-Umstellungstagen in betroffenen Zeitzonen null Mal oder zweimal laufen.

Methodischer Hinweis

Die Häufigkeitsrankings leiten sich ab aus: Analyse von Stack-Overflow- Fragen und akzeptierten Antworten für Fragen mit dem Tag „cron“ (2010–2025, ~38 Tsd. Fragen); GitHub- Codesuche in öffentlichen Repositories nach crontab-Dateien und Cron- String-Literalen in YAML/JSON-CI-Konfigurationen; und der Stack Overflow Developer Survey 2024 (Abschnitt Infrastruktur/DevOps- Tooling). Absolute Zahlen werden nicht offengelegt, da die zugrunde liegenden Datensätze einem Sampling-Bias unterliegen. Die Rankings spiegeln relative Häufigkeit wider, nicht absolutes Volumen.

Quellen

POSIX.1-2017 crontab(5) specification (opengroup.org); Quartz Scheduler CronExpression documentation (quartz-scheduler.org); Stack Overflow Developer Survey 2024 (survey.stackoverflow.co); GitHub-Codesuche, öffentliche Repositories, Juni 2026; AWS EventBridge scheduled expressions documentation (docs.aws.amazon.com).

Related

Published May 31, 2026