Cron-Ausdrücke erstellen und erklären
Erstelle einen Cron-Ausdruck oder lass dir einen in Klartext erklären.
Über dieses Tool
Wähle, wie oft ein Job laufen soll, um einen Cron-Ausdruck zu erstellen, oder tippe einen ein, um eine verständliche Beschreibung, eine Aufschlüsselung jedes Felds und die nächsten Ausführungszeiten in deiner Zeitzone zu erhalten. Unterstützt Bereiche, Listen, Schritte, Monats- und Tagesnamen sowie Kürzel wie @daily.
So verwendest du es
- Um einen Ausdruck zu lesen, füge ihn im Modus Erklären ein und lies ihn in Klartext.
- Um einen zu erstellen, wechsle in den Modus Erstellen und wähle, wie oft der Job laufen soll.
- Prüfe die nächsten Ausführungszeiten, angezeigt in deiner eigenen Zeitzone.
- Kopiere den Ausdruck in deine crontab, CI-Konfiguration oder deinen Scheduler.
Fragen
- Was bedeuten die fünf Felder?
- Der Reihe nach: Minute (0–59), Stunde (0–23), Tag des Monats (1–31), Monat (1–12) und Wochentag (0–6, Sonntag ist 0 oder 7). Ein * bedeutet jeden Wert.
- Wie führe ich einen Job alle 5 Minuten aus?
- Nutze */5 * * * *. Das /5 ist ein Schritt und bedeutet jeden fünften Wert dieses Felds, beginnend bei 0.
- Was passiert, wenn ich sowohl Tag des Monats als auch Wochentag setze?
- Im klassischen Cron läuft der Job, wenn eins von beiden passt, nicht erst, wenn beide passen. 0 9 1 * MON läuft also um 9:00 am 1. jedes Monats und an jedem Montag.
- Welche Zeitzone verwendet cron?
- Die Zeitzone des Rechners oder Dienstes, der ihn ausführt – auf Servern und in CI oft UTC. Die nächsten Ausführungen werden hier in deiner Ortszeit angezeigt, also rechne um, wenn dein Server UTC verwendet.
- Wie lasse ich einen Cronjob alle 30 Sekunden laufen?
- Mit cron geht das nicht: Die kleinste Einheit ist eine Minute. Ein gängiger Workaround sind zwei Einträge, einer führt den Befehl aus, der andere sleep 30 gefolgt vom Befehl. Für alles, was genauer oder häufiger laufen soll, nimm einen systemd-Timer oder einen dauerhaft laufenden Prozess mit eigener Schleife.
- Wie lasse ich einen Job am letzten Tag des Monats laufen?
- Standard-Cron kennt kein L. Plane den Job für die Tage 28-31, etwa 0 23 28-31 * *, und stelle dem Befehl eine Prüfung voran, ob morgen der 1. ist, zum Beispiel [ $(date -d tomorrow +\%d) = 01 ] && your-command – das setzt GNU date voraus.
- Was bedeutet @reboot in einer Crontab?
- @reboot führt den Befehl einmal aus, wenn der cron-Daemon startet, meist direkt nach dem Booten des Rechners. cronie und Vixie cron unterstützen es, es ist aber kein Zeitplan, daher kann dieses Tool keine nächsten Ausführungen dafür anzeigen und meldet einen Fehler. Auf systemd-Systemen ist eine Service-Unit oft die bessere Wahl.
Warum läuft mein Cronjob nicht?
Prüfe zuerst, ob cron den Job überhaupt sieht. Führe crontab -l als derselbe Benutzer aus und achte darauf, dass die Datei mit einem Zeilenumbruch endet, weil manche cron-Versionen eine letzte Zeile ohne Umbruch ignorieren. Prüfe dann den Zeitplan: Füge ihn hier ein und lies die nächsten Ausführungen ab. Eine häufige Überraschung ist */45 im Minutenfeld, das jede Stunde um :00 und :45 auslöst, nicht alle 45 Minuten.
Stimmt der Zeitplan, liegt es meist an der Umgebung. Cron läuft mit minimalem PATH und ohne Shell-Profil, deshalb scheitern Befehle, die in deinem Terminal funktionieren, mit „command not found“. Verwende absolute Pfade, setze PATH am Anfang der Crontab und leite die Ausgabe mit >> /tmp/job.log 2>&1 in ein Log um, damit du die Fehler siehst. Beachte außerdem, dass % in Crontab-Zeilen eine Sonderbedeutung hat und als \% escapt werden muss.
Cron-Syntax erklärt: Bereiche, Listen, Schritte und Kurzformen
Jedes Feld akzeptiert mehr als eine einzelne Zahl. Ein Bereich wie 9-17 passt auf jeden Wert von 9 bis 17, eine Liste wie 1,15 auf jeden aufgeführten Wert und ein Schritt wie */15 auf jeden fünfzehnten Wert ab dem Minimum des Felds. Sie lassen sich kombinieren: 0-30/10 im Minutenfeld bedeutet 0, 10, 20 und 30. Die Felder für Monat und Wochentag akzeptieren auch Namen wie JAN oder MON-FRI.
Kurzformen ersetzen einen ganzen Ausdruck: @hourly ist 0 * * * *, @daily und @midnight sind 0 0 * * *, @weekly ist 0 0 * * 0, @monthly ist 0 0 1 * *, und @yearly oder @annually ist 0 0 1 1 *. Im Wochentagsfeld bedeuten sowohl 0 als auch 7 Sonntag. Die Tabelle „Felder“ in diesem Cron-Erklärer zeigt, zu welchen Werten jedes Feld aufgelöst wird – der schnellste Weg, eine knifflige Kombination zu prüfen.
Crontab vs. Kubernetes, GitHub Actions und Quartz-Cron
Das Format mit fünf Feldern teilen sich Linux-Crontab, Kubernetes-CronJobs und Zeitpläne in GitHub Actions, ein mit diesem Cron-Generator erstellter Ausdruck funktioniert also in allen dreien. GitHub Actions verwendet immer UTC, läuft höchstens alle 5 Minuten und startet geplante Jobs bei hoher Last eventuell verspätet. Kubernetes nutzt die Zeitzone des Controllers, sofern du nicht spec.timeZone setzt. Keines davon unterstützt ein Sekundenfeld.
Quartz, Spring und AWS EventBridge verwenden längere Formate. Quartz und Spring stellen ein Sekundenfeld an den Anfang, AWS hängt ein Jahresfeld ans Ende. Quartz und AWS verlangen außerdem ? in einem der beiden Tagesfelder, und alle drei unterstützen Extras wie L für den letzten Tag und # für den n-ten Wochentag. Solche Ausdrücke werden hier abgelehnt, entferne also die zusätzlichen Felder und schreib L oder # von Hand um.
Häufige Cron-Ausdrücke
Kopiere einen dieser Zeitpläne oder füge ihn oben in das Tool ein, um seine nächsten Ausführungen zu sehen.
| Ausdruck | Bedeutung |
|---|---|
* * * * * | Jede Minute |
*/5 * * * * | Alle 5 Minuten |
*/15 * * * * | Alle 15 Minuten |
0 * * * * | Jede Stunde |
0 */6 * * * | Zur vollen Stunde, alle 6 Stunden |
0 0 * * * | Um 00:00 |
30 2 * * * | Um 02:30 |
0 9 * * 1-5 | Um 09:00, Montag bis Freitag |
0 0 * * 0 | Um 00:00, nur jeden Sonntag |
0 0 1 * * | Um 00:00, an Tag 1 des Monats |
0 0 1 1 * | Um 00:00, an Tag 1 des Monats, nur im Januar |
Funktioniert etwas nicht, oder sieht ein Ergebnis falsch aus? Ein Problem mit diesem Tool melden