Skip to main content

Erstellen Sie einen Cron-Ausdruck aus einfachen Optionen – ohne Syntax auswendig zu lernen.

Cron-Ausdruck

0 2 * * *

Täglich — 02:00

Die fünf Felder verstehen

Ein Cron-Ausdruck hat fünf Felder in fester Reihenfolge: Minute, Stunde, Tag des Monats, Monat und Wochentag. Ein Sternchen bedeutet „jeder Wert", eine Zahl legt einen exakten Wert fest, und */N bedeutet „alle N". 30 2 * * 1 läuft also jeden Montag um 02:30 Uhr.

Zwei Details überraschen oft. Beim Wochentag ist Sonntag 0 (in den meisten Implementierungen auch 7), Montag also 1. Und wenn Sie Tag des Monats und Wochentag gleichzeitig setzen, führen die meisten Cron-Daemons den Job aus, wenn eines von beiden zutrifft – nicht beides. Lassen Sie daher eines als Sternchen, sofern Sie das nicht ausdrücklich wollen.

Warum `0 0 13 * 5` nicht Freitag, der 13. bedeutet

Ein Cron-Ausdruck besteht aus fünf Feldern, die beschreiben, wann ein Befehl läuft. Das meiste ist klar, sobald man es einmal gesehen hat. Zwei Dinge nicht: wie die Tagesfelder zusammenwirken und wodurch ein Schrittwert tatsächlich schreitet. Beide erzeugen still Zeitpläne, die weit häufiger auslösen als beabsichtigt.

So wird gerechnet

  • Baut den Fünf-Feld-Ausdruck — Minute, Stunde, Tag des Monats, Monat, Wochentag — aus einfachen Auswahlen.
  • Zeigt die nächsten Auslösezeiten, die einzige verlässliche Bestätigung, dass ein Ausdruck das Gemeinte trifft.
  • Macht das Zusammenspiel von Monatstag und Wochentag sichtbar, statt es in der Produktion entdecken zu lassen.
┌─ Minute        0–59
│ ┌─ Stunde      0–23
│ │ ┌─ Tag des Monats 1–31
│ │ │ ┌─ Monat     1–12
│ │ │ │ ┌─ Wochentag 0–6 (Sonntag = 0)
* * * * *

sind Monatstag UND Wochentag beide eingeschränkt, läuft Cron bei EINEM von beiden

Rechenbeispiel

Zwei Ausdrücke, die fast alle beim ersten Mal falsch lesen.

  1. `0 0 13 * 5` liest sich wie "Mitternacht an Freitag, dem 13."
  2. beide Tagesfelder sind eingeschränkt, also verknüpft Cron sie mit ODER
  3. tatsächlich läuft es am 13. jedes Monats UND an jedem Freitag — etwa 64-mal im Jahr, nicht ein- oder zweimal
  4. `0 0 */7 * *` liest sich wie "alle sieben Tage"
  5. der Schritt gilt im Bereich 1–31 und ergibt den 1., 8., 15., 22. und 29.

Der zweite Ausdruck setzt monatlich zurück, der Abstand vom 29. zum nächsten 1. beträgt in einem 31-Tage-Monat also drei Tage, nicht sieben. Keiner der beiden ist wöchentlich. `0 0 * * 5` heißt jeden Freitag.

Das Ergebnis lesen

  • Die ODER-Regel greift nur, wenn beide Tagesfelder eingeschränkt sind. Ist eines `*`, verhält sich das andere normal — deshalb bleibt die Falle verborgen, bis jemand beide ausfüllt.
  • Schritte zählen immer ab Bereichsanfang, nicht ab heute. `*/7` in einem bei 1 beginnenden Feld trifft 1, 8, 15, 22, 29, unabhängig vom Tag der Einrichtung.
  • Cron nutzt die Zeitzone des Systems oder Daemons. Ein auf 02:30 gesetzter Job kann an Zeitumstellungstagen zweimal oder gar nicht laufen; eine Planung außerhalb von 01:00–03:00 umgeht das ganz.
  • `0` und `7` bedeuten im Wochentagsfeld bei den meisten Implementierungen Sonntag, und Namen wie `MON` oder `JAN` werden weithin, aber nicht überall unterstützt.

Häufige Fragen

Wie plane ich wirklich etwas alle sieben Tage?
Nehmen Sie einen Wochentag: `0 0 * * 5` für jeden Freitag. Brauchen Sie wirklich ein festes Sieben-Tage-Intervall unabhängig vom Kalender, ist Cron das falsche Werkzeug — ein sich selbst neu planender Job oder ein Timer mit monotonem Intervall drückt das sauber aus.
Was läuft am 31. in einem kurzen Monat?
Nichts. Cron rollt nicht auf den 1. weiter, `0 0 31 * *` überspringt also stillschweigend Februar, April, Juni, September und November. Für Monatsendarbeiten planen Sie den 1. und schauen zurück.