Cron-Ausdruck-Generator

Cron-Job-Zeitpläne visuell erstellen und verstehen.

Schnell-Presets

* * * * *

Nächste 5 Ausführungen

Cron-Syntax-Referenz

* · jeder Wert

*/5 · alle 5 Einheiten

1,15 · bei den Werten 1 und 15

1-5 · Bereich von 1 bis 5

Felder: Minute (0–59), Stunde (0–23), Tag des Monats (1–31), Monat (1–12), Wochentag (0–6, 0=Sonntag)

Eine kurze Geschichte des Cron-Ausdrucks

Der fünffeldrige Cron-Ausdruck stammt aus dem Mai 1975, als eine frühe Version aus den AT&T Bell Laboratories als Teil von Research Unix Version 7 ausgeliefert wurde. Der Name verweist auf Chronos, die griechische Personifikation der Zeit. Das Format war einfach: fünf durch Leerzeichen getrennte Felder (Minute, Stunde, Tag-im-Monat, Monat, Wochentag) auf einer Zeile in /usr/lib/crontab. Die Vixie-cron-Neufassung von Paul Vixie im Jahr 1987 wurde zur faktischen modernen Implementierung; jede große Linux-Distribution liefert ein Vixie-abgeleitetes cron aus, und Vixie fügte das benutzerspezifische crontab, die Unterstützung für Umgebungsvariablen (MAILTO=, CRON_TZ=) und die Kurzform-Makros @hourly / @daily / @reboot hinzu, die heute alle verwenden. Die Cron-Ausdruckssyntax verzweigte sich dann in zwei Pfade. Der Quartz Scheduler (Java, James House, 1998; an Apache und Terracotta gespendet) fügte ein führendes Sekundenfeld, ein optionales nachfolgendes Jahresfeld und die Operatoren L (last) / W (weekday) / # (n-tes Vorkommen) hinzu und produzierte das sechsfeldrige Cron, das AWS EventBridge (ursprünglich CloudWatch Events, 2014) und Springs @Scheduled-Annotation später übernahmen. Das von Azure Functions (2016) verwendete NCronTab-Format setzte Sekunden an erste Stelle, behielt aber fünf Verhaltensfelder bei. Die Cloud-Ära standardisierte dann das fünffeldrige Vixie-Format als Lingua franca: Kubernetes CronJobs (Alpha 1.4 in 2016, GA in 1.21 in 2021) akzeptieren genau fünf Felder, ebenso GitHub Actions (on.schedule.cron, 2019), GCP Cloud Scheduler (2018) und Vercel Cron Jobs (2022). Visuelle Cron-Builder, die Kategorie, zu der dieses Tool gehört, entstanden etwa 2010-2015: crontab.guru (Christine Dodrill, 2014) wurde die meistzitierte Referenz, und die cron-descriptor-Bibliothek (Brady Holt, ursprünglich .NET, portiert nach Java/Python/JS) trieb die meisten «cron in einfachem Englisch»-Übersetzungsebenen an, auf denen Decoder und Generatoren basieren. Ein halbes Jahrhundert nach Bell Labs planen dieselben fünf Felder immer noch die nächtlichen Backups der Welt.

Die Anatomie eines Cron-Ausdrucks

Wo der Ausdruck eingebaut wird

Standards, Dialekte und Meilensteine

Weitere häufig gestellte Fragen

Sind fünf Felder dasselbe wie sechs oder sieben?

Nein. Die klassische POSIX-Form ist fünf Felder (Minute, Stunde, Tag-im-Monat, Monat, Wochentag). Quartz und Spring verwenden sechs Felder durch Hinzufügen einer führenden Sekundenspalte, und Quartz akzeptiert ein optionales siebtes Jahresfeld. AWS EventBridge verwendet immer sechs Felder, die mit Jahr enden (cron(min hr dom mon dow yr)). Das Einfügen eines fünffeldrigen Ausdrucks in Quartz oder Spring wirft einen Syntaxfehler; das Einfügen eines sechsfeldrigen Ausdrucks in Linux interpretiert die Felder stillschweigend falsch.

Was ist das kleinste Intervall, das cron ausdrücken kann?

Jede Minute (* * * * *) auf Standard-Unix-cron. Es gibt kein eingebautes Sekundenfeld. Scheduler wie Quartz oder NCronTab fügen eines hinzu, wenn Sie eine Unter-Minuten-Kadenz benötigen, und systemd-Timer können OnUnitActiveSec=30s verwenden. GitHub Actions begrenzt die kürzeste Kadenz auf 5 Minuten, und EventBridge feuert innerhalb eines 60-Sekunden-Fensters der geplanten Zeit, also verlassen Sie sich nicht auf cron für harte Echtzeit-Präzision.

Wie führe ich einen Job am letzten Tag des Monats aus?

Standard-fünffeldriges cron hat keinen nativen «letzter Tag des Monats»-Operator. Quartz und AWS EventBridge unterstützen L im Tag-im-Monat-Feld: 0 0 L * ? feuert um Mitternacht am letzten Tag. Auf reinem Linux-cron ist die übliche Umgehung, täglich an Kandidatentagen zu planen und den Befehl zu filtern: 0 0 28-31 * * [ "$(date +\%d -d tomorrow)" = "01" ] && /path/to/script. systemd-Timer drücken es direkt aus mit OnCalendar=*-*-* 00:00:00.

Warum lief mein cron-Job nicht, als ich es erwartete?

Die üblichen Verdächtigen, in der Reihenfolge: (1) der Server ist in einer anderen Zeitzone, als Sie annehmen (überprüfen Sie mit date); (2) PATH ist nicht das, was Ihre interaktive Shell hat, also funktioniert ein Befehl am Prompt, scheitert aber unter cron (verwenden Sie absolute Pfade); (3) die Ausgabe ging per E-Mail und Sie haben sie verpasst (setzen Sie MAILTO="" oder leiten Sie an eine Logdatei um); (4) der cron-Daemon läuft nicht (systemctl status cron); (5) die ODER-Falle (siehe oben) feuert an zusätzlichen Tagen, die Sie nicht beabsichtigten.

Was ist der Unterschied zwischen cron, anacron und systemd-Timern?

Cron erwartet, dass das System zum geplanten Zeitpunkt läuft, und überspringt stillschweigend Jobs, die während Ausfallzeiten anfallen: gut für immer eingeschaltete Server, schlecht für Laptops. Anacron verfolgt pro Job die letzte Ausführungszeitstempel und holt verpasste Jobs nach einem Neustart nach, auf Kosten der Tages- statt Minutengenauigkeit. systemd-Timer ersetzen cron auf den meisten modernen Linux-Distributionen: Sie unterstützen sowohl Kalender- als auch monotone Schedules, loggen in journald, können Service-Abhängigkeiten deklarieren und verwenden Persistent=true, um cron-artige Präzision mit anacron-artigem Nachholen zu kombinieren.

Wie wirken sich Zeitzonen und Sommerzeit auf cron aus?

Die meisten cron-Daemons interpretieren Schedules in der System-Zeitzone. Auf Cloud-Servern bedeutet das üblicherweise UTC, also feuert 0 9 * * * um 9 Uhr UTC, nicht 9 Uhr lokal. Setzen Sie CRON_TZ=America/New_York in einem Linux-crontab; Kubernetes verwendet spec.timeZone; AWS, GCP und Vercel nehmen jeweils eine explizite IANA-Zone. Während der Frühlingszeitumstellung werden Jobs, die in der übersprungenen Stunde geplant sind, von Vixie cron unmittelbar danach ausgeführt, aber von AWS EventBridge vollständig übersprungen. Das sicherste Muster ist, cron in UTC zu belassen und innerhalb des Jobs zu konvertieren.

Verwandte Tools