Was ist dieses Tool?
Ein Cron-Ausdruck ist eine kompakte, fünfteilige Zeitplan-Zeichenfolge — `Minute Stunde Tag-des-Monats Monat Wochentag` — die vom Unix-`cron`-Daemon und praktisch jedem danach modellierten Job-Scheduler verwendet wird (crontab, Kubernetes CronJobs, GitHub Actions `schedule:`, Airflow, Jenkins). Jedes Feld akzeptiert ein Sternchen (`*`, bedeutet „jeder Wert"), eine bestimmte Zahl, eine durch Kommas getrennte Liste (`1,15,30`), einen Bereich (`9-17`), einen Schritt (`*/15`, bedeutet „alle 15 Einheiten") oder — bei Monat und Wochentag — einen dreibuchstabigen Namen (`JAN`, `MON`) anstelle einer Zahl.
Die maßgebliche Definition dieser Syntax ist die Linux crontab(5)-Man-Page, die genau dieselben fünf Felder, Sonderzeichen (`* , - /`) und die acht `@`-Kurzformen (`@reboot`, `@yearly`/`@annually`, `@monthly`, `@weekly`, `@daily`/`@midnight`, `@hourly`) dokumentiert, die die meisten Cron-Implementierungen, einschließlich Vixie cron (die auf den meisten Linux-Distributionen mitgelieferte Version), als Aliase für gängige Zeitpläne unterstützen.
Dieses Tool implementiert genau dieses standardmäßige 5-Felder-Format — das Format, das du direkt in `crontab -e` auf einem Linux- oder macOS-Server eingeben würdest, oder in das `schedule:`-Feld eines Kubernetes CronJobs. Es implementiert nicht die Quartz-Cron-Syntax, ein anderes, 6- oder 7-Felder-Format, das von Javas Quartz Scheduler und einigen Hersteller-Tools verwendet wird (siehe den Vergleichsabschnitt weiter unten, wann du stattdessen dieses Format brauchst).
Warum sollte man es nutzen?
- Du übernimmst ein Repository und findest `0 3 * * 1-5` in einer Kubernetes-CronJob-Konfiguration ohne jeden Kommentar — füge den Ausdruck hier ein, um in Sekunden zu bestätigen, dass er montags bis freitags um 3 Uhr läuft, bevor du etwas änderst.
- Du richtest einen GitHub-Actions-Workflow mit `schedule:` ein und weißt nicht mehr, ob die Feldreihenfolge Minute-Stunde oder Stunde-Minute ist — baue den Zeitplan mit den Dropdowns statt einen Off-by-one-Fehler bei den Feldern zu riskieren.
- Ein CronJob, der nur montags laufen sollte, führt sich plötzlich auch am 1. jeden Monats aus, und du vermutest die klassische Falle aus kombiniertem Tag-des-Monats und Wochentag — prüfe die nächsten 5 berechneten Ausführungszeiten, um das Vereinigungsverhalten zu bestätigen, bevor du den Bug meldest.
- Dein DevOps-Team bittet um einen Job, der "alle 15 Minuten während der Geschäftszeiten, montags bis freitags" läuft, und du willst den exakten Cron-Ausdruck liefern statt einer Annäherung, die später jemand korrigieren muss.
- Du siehst `@daily` in einer geerbten crontab und bist dir nicht sicher, ob das Mitternacht oder eine andere Uhrzeit bedeutet — übersetze das Kürzel in den äquivalenten 5-Felder-Ausdruck, bevor du entscheidest, ob er geändert werden muss.
- Du migrierst einen Quartz-Scheduler-Job (mit 6 oder 7 Feldern) zu einem standardmäßigen Kubernetes-CronJob und musst bestätigen, dass dein neuer 5-Felder-Ausdruck die richtige Syntax verwendet, ohne Zeichen wie `?` oder `L` mitzuschleppen, die es in Standard-Cron nicht gibt.
Anleitung
- Um einen Ausdruck zu übersetzen: Tippe oder füge eine 5-Felder-Cron-Zeichenfolge (oder eine @-Kurzform wie `@daily`) in das Eingabefeld ein.
- Lies die Beschreibung in Klartext und die nächsten 5 berechneten Ausführungszeiten darunter — beide aktualisieren sich live während der Eingabe.
- Um stattdessen einen zu erstellen: Öffne den Builder-Bereich, wähle für jedes der fünf Felder einen Modus (jeder / jeder N-te / bestimmter Wert) und klicke auf „Ausdruck generieren".
- Der generierte Ausdruck füllt das Eingabefeld oben aus und fließt sofort zurück in die Beschreibung und die Anzeige der nächsten Ausführungszeiten.
- Nutze die Syntax-Legende unten als schnelle Referenz für `*`, `,`, `-` und `/`.
- Kopiere den endgültigen Ausdruck mit der Kopieren-Schaltfläche und füge ihn in deine crontab, CI-Konfiguration oder deinen Scheduler ein.
Beispiel
Eingabe
*/15 9-17 * * MON-FRIAusgabe
Um 09:00, 09:15, 09:30, 09:45, 10:00 ... 17:45 Uhr, montags, dienstags, mittwochs, donnerstags, freitagsDieser Ausdruck läuft alle 15 Minuten, aber nur im Stundenbereich von 09:00 bis 17:59 Uhr und nur an Werktagen — ein typischer Abfragezeitplan für „Geschäftszeiten".
Standard-Cron vs. Quartz-Cron
„Cron-Syntax" ist kein einheitlicher universeller Standard — die beiden Formate, denen du am häufigsten begegnest, unterscheiden sich in der Feldanzahl und in der Bedeutung einiger Sonderzeichen. Nutze diese Tabelle, um zu bestätigen, dass du das richtige Format für deinen Ziel-Scheduler verwendest.
| Aspekt | Standard-Cron (dieses Tool) | Quartz-Cron |
|---|---|---|
| Feldanzahl | 5 (Minute Stunde dom Monat dow) | 6 oder 7 (fügt Sekunden und optional Jahr hinzu) |
| Verwendet von | Linux/macOS crontab, Kubernetes CronJob, GitHub Actions | Java Quartz Scheduler, einige Enterprise-Scheduler |
| Tag-des-Monats + Wochentag beide gesetzt | Trifft auf EINEN von beiden zu (Vereinigung/ODER) | Erfordert `?` in einem der beiden Felder — beide können nicht gleichzeitig auf einen Wert gesetzt werden |
| Zusätzliche Sonderzeichen | Keine über `* , - /` hinaus | Fügt `?`, `L` (letzter), `W` (nächstgelegener Werktag), `#` (n-ter Wochentag des Monats) hinzu |
| Zeitplanung auf Sekundenebene | Nicht unterstützt | Unterstützt (erstes Feld) |
Verwandte Tools
Arbeitest du mit Konfigurationen, Zeitplänen oder Zeitstempeln? Diese Tools ergänzen den Cron-Generator gut.
Häufige Cron-Zeitpläne und ihre Bedeutung
Das sind einige der am häufigsten wiederkehrenden Muster in echten CI/CD-, Backup- und Wartungskonfigurationen — als Ausgangspunkt nützlich, bevor du die Felder an deinen Fall anpasst.
- `0 0 * * *` — jeden Tag um Mitternacht, der klassische Zeitplan für nächtliche Backups oder Log-Bereinigung.
- `0 9 * * 1-5` — um 9 Uhr, montags bis freitags, typisch für automatische Berichte, die nur an Werktagen relevant sind.
- `*/5 * * * *` — alle 5 Minuten, üblich für Healthchecks oder häufige Datensynchronisation.
- `0 0 1 * *` — am 1. jeden Monats um Mitternacht, genutzt für monatliche Abrechnung oder Report-Rotation.
- `0 2 * * 0` — jeden Sonntag um 2 Uhr, ein gängiger Zeitplan für aufwendige Wartungsarbeiten bei geringem Traffic.
Häufig gestellte Fragen
Was ist ein Cron-Ausdruck?
Ein Cron-Ausdruck ist eine 5-Felder-Textzeichenfolge (`Minute Stunde Tag-des-Monats Monat Wochentag`), die einen wiederkehrenden Zeitplan für den Unix-`cron`-Daemon und kompatible Scheduler festlegt. Jedes Feld kann `*` (jeder Wert), eine Zahl, eine durch Kommas getrennte Liste, einen Bereich (`a-b`) oder einen Schritt (`*/n`) sein; die Felder für Monat und Wochentag akzeptieren auch dreibuchstabige Namen wie `JAN` oder `MON`. Die vollständige Spezifikation ist in der crontab(5)-Man-Page dokumentiert.
Was passiert, wenn sowohl Tag-des-Monats als auch Wochentag eingeschränkt sind?
Das ist eine bekannte Cron-Falle: Gemäß der POSIX-Cron-Semantik läuft ein Job, wenn BEIDE Felder Tag-des-Monats und Wochentag eingeschränkt sind (nicht `*`), sobald EINE der beiden Bedingungen erfüllt ist — es handelt sich um eine Vereinigung (ODER), keine Schnittmenge (UND). Zum Beispiel läuft `0 4 8 * MON` um 4 Uhr sowohl am 8. jeden Monats ALS AUCH an jedem Montag, nicht nur an Montagen, die zufällig auf den 8. fallen. Dieses Tool implementiert genau dieses Vereinigungsverhalten bei der Berechnung der nächsten Ausführungszeiten.
Standard-Cron vs. Quartz-Cron — welches brauche ich?
Dieses Tool erzeugt die standardmäßige 5-Felder-POSIX/Vixie-Cron-Syntax — das Format, das von Linux/macOS `crontab`, Kubernetes CronJobs, GitHub Actions `schedule:` und den meisten Unix-basierten Job-Runnern verwendet wird. Quartz-Cron, verwendet von Javas Quartz Scheduler und darauf aufbauenden Tools (einige Enterprise-Scheduler, ältere Spring-Batch-Konfigurationen), ist ein anderes, 6- oder 7-Felder-Format, das ein zusätzliches führendes Sekundenfeld hinzufügt und die Bedeutung einiger Sonderzeichen ändert (`?` für „kein bestimmter Wert" in Tagesfeldern, `L`/`W`/`#` für „letzter Tag", „nächstgelegener Werktag" und „n-ter Wochentag des Monats"). Wenn die Feldanzahl deines Schedulers 6 oder 7 beträgt oder deine Dokumentation `?`, `L`, `W` oder `#` erwähnt, brauchst du ein Quartz-spezifisches Tool — Ausdrücke aus diesem Generator werden dort nicht korrekt geparst. Wenn es genau 5 Felder sind (oder eine `@daily`-artige Kurzform), bist du hier richtig.
Was bedeuten die Kürzel @yearly, @monthly, @weekly, @daily und @hourly?
Das sind nicht standardisierte, aber weit verbreitete Kurzformen, die zu gängigen 5-Felder-Ausdrücken expandieren: `@yearly`/`@annually` = `0 0 1 1 *` (einmal im Jahr, 1. Januar um Mitternacht), `@monthly` = `0 0 1 * *` (am 1. jeden Monats um Mitternacht), `@weekly` = `0 0 * * 0` (jeden Sonntag um Mitternacht), `@daily`/`@midnight` = `0 0 * * *` (jeden Tag um Mitternacht), `@hourly` = `0 * * * *` (zu jeder vollen Stunde). Dieses Tool erkennt sie alle und behandelt sie genau wie ihr expandiertes 5-Felder-Äquivalent.
Kann ich Tages-/Monatsnamen anstelle von Zahlen verwenden?
Ja. Das Monatsfeld akzeptiert dreibuchstabige Namen von `JAN` bis `DEC`, und das Wochentagsfeld akzeptiert `SUN` bis `SAT` (Groß-/Kleinschreibung wird ignoriert) austauschbar mit Zahlen. Wochentagszahlen laufen von 0–6, wobei 0 = Sonntag ist; einige Implementierungen akzeptieren auch 7 für Sonntag, was dieses Tool auf 0 normalisiert. Bereiche und Listen funktionieren auch mit Namen, z. B. `MON-FRI` oder `JAN,JUN,DEC`.
Wird mein Cron-Ausdruck an einen Server gesendet?
Nein. Das Parsen, die Beschreibung in Klartext und die Berechnung der nächsten Ausführungszeiten geschehen alle lokal in JavaScript in deinem Browser. Nichts, was du eingibst oder generierst, verlässt jemals dein Gerät.
In welcher Zeitzone berechnet das Tool die nächsten Ausführungszeiten?
Es verwendet die in deinem Browser bzw. Gerät eingestellte Zeitzone. Beachte, dass viele Cron-Systeme auf Servern standardmäßig auf UTC eingestellt sind — liegt dein Server nicht in deiner Zeitzone, können die hier angezeigten nächsten Ausführungszeiten von den tatsächlichen Zeiten auf dem Server abweichen. Prüfe die Systemzeitzone, bevor du dich auf das Ergebnis verlässt.
Wie schreibe ich einen Ausdruck, der am letzten Tag jedes Monats läuft?
Standard-Cron mit 5 Feldern hat kein Sonderzeichen für "letzter Tag des Monats" (das ist `L`, exklusiv für Quartz) — die übliche Lösung ist, den Job auf den 1. des Folgemonats zu legen und im Skript einen Tag abzuziehen, oder `28-31` mit zusätzlicher Logik im Job zu kombinieren, um zu prüfen, ob es der letzte Tag ist.
Warum läuft mein Ausdruck mit `*/7` im Tag-des-Monats-Feld nicht exakt alle 7 Tage?
Der Schritt `*/7` im Tag-des-Monats-Feld zählt nicht ab der letzten Ausführung, sondern ab dem 1. des Monats: Er läuft an den Tagen 1, 8, 15, 22 und 29 — nicht durchgehend alle 7 Tage über Monatsgrenzen hinweg. Für ein echtes 7-Tage-Intervall ohne monatlichen Reset brauchst du Logik außerhalb von Cron oder einen Scheduler mit Unterstützung für relative Intervalle.
Kann ich einen Zeitplan erzeugen, der zu mehreren bestimmten Minuten läuft, etwa 0, 15, 30 und 45?
Ja — nutze eine durch Kommas getrennte Liste im Minutenfeld: `0,15,30,45 * * * *`. Das Ergebnis entspricht in diesem speziellen Fall `*/15 * * * *`, aber eine Liste gibt dir volle Kontrolle, wenn die Minuten nicht gleichmäßig verteilt sind.