bitlvl
DE

Cron-Ausdruck-Erklärer

Tippen Sie die fünf Felder eines crontab-Eintrags. Sie erhalten den Zeitplan in Klartext und die nächsten zehn Zeitpunkte, zu denen er auslösen würde, in der Zeitzone Ihrer Wahl.

Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.

Crontab-Syntax

┌───────────── Minute        0–59
│ ┌─────────── Stunde        0–23
│ │ ┌───────── Tag im Monat  1–31
│ │ │ ┌─────── Monat         1–12  oder jan–dec
│ │ │ │ ┌───── Wochentag     0–7   oder sun–sat  (0 und 7 sind Sonntag)
│ │ │ │ │
* * * * *  auszuführender Befehl
SyntaxBedeutungBeispiel
*Jeder Wert* * * * *jede Minute
5Genau dieser Wert5 0 * * *täglich 00:05
1-5Ein Bereich0 9 * * 1-509:00 an Werktagen
*/15Jeder n-te Wert*/15 * * * *alle 15 Minuten
1,15Eine Liste0 0 1,15 * *Mitternacht am 1. und 15.
8-18/2Schritt innerhalb eines Bereichs0 8-18/2 * * *alle 2 Stunden von 08:00 bis 18:00
@dailyMakro@dailywie 0 0 * * *

Die Falle Tag-im-Monat / Wochentag

Sind sowohl Tag im Monat als auch Wochentag eingeschränkt, läuft Standard-Cron, wenn eines passt, nicht beide. 0 0 13 * 5 löst an jedem 13. und an jedem Freitag aus, nicht nur an Freitag, dem 13. Der Erklärer weist auf diesen Fall hin.

Zeitzonen und Sommerzeit

Cron läuft in der Systemzeitzone des Rechners (oder, wo unterstützt, nach der Variable CRON_TZ / TZ). In der Nacht der Zeitumstellung nach vorn läuft ein Job für 02:30 womöglich gar nicht; beim Zurückstellen vielleicht zweimal. Jobs, die genau einmal täglich laufen müssen, sind zwischen 03:00 und 23:00 oder in UTC am sichersten. Die Laufliste oben nutzt echte Kalenderregeln der gewählten Zone, sodass Sie eine Umstellungsnacht direkt prüfen können.

Weitere Dinge, die man wissen sollte

  • Cron hat Minutenauflösung. Für Sekunden nutzen Sie einen systemd-Timer oder eine Schleife im Job.
  • Die Umgebung ist minimal: Setzen Sie PATH in der crontab oder nutzen Sie absolute Pfade, und leiten Sie die Ausgabe um, sonst wird sie Ihnen gemailt.
  • % im Befehlsfeld ist ein Zeilenumbruch, sofern nicht als \% maskiert, was date +%F trifft.
  • Sechs-Feld-Ausdrücke mit Sekundenspalte sind Quartz/Spring-Syntax, und die nicht standardisierten L, W und # sind ebenfalls Quartz. Normales crontab akzeptiert sie nicht.

Fragen

Wie lasse ich einen Cron-Job alle 5 Minuten laufen?

*/5 * * * *. Für alle 5 Minuten nur während der Arbeitszeit: */5 9-17 * * 1-5.

Wie lasse ich etwas täglich um Mitternacht laufen?

0 0 * * * oder das Makro @daily. Für 00:30 nutzen Sie 30 0 * * *.

Wie plane ich den letzten Tag des Monats?

Standard-Cron kann das nicht direkt ausdrücken. Lassen Sie den Job an den Tagen 28–31 laufen und das Skript prüfen, ob morgen der 1. ist: 0 0 28-31 * * [ "$(date -d tomorrow +%d)" = "01" ] && /pfad/zum/job.

Ist der Wochentag für Sonntag 0 oder 7?

Beides. 0 und 7 sind in den meisten Cron-Implementierungen Sonntag; Montag ist 1. Namen (sun, mon) werden ebenfalls akzeptiert und sind schwerer falsch zu machen.

Warum lief mein Job zur falschen Zeit?

Fast immer die Zeitzone: Der Server läuft in UTC und Sie erwarteten Ortszeit, oder umgekehrt. Prüfen Sie mit date auf dem Server, oder setzen Sie CRON_TZ=Europe/Berlin oben in der crontab, wo unterstützt (cronie, Vixie cron).

Was ist der Unterschied zwischen Cron und systemd-Timern?

Timer können mit Kalenderausdrücken mit Sekunden laufen, verpasste Läufe nach einem Neustart nachholen (Persistent=true), ins Journal loggen und von anderen Units abhängen. Cron ist einfacher und universell. Beide eignen sich für gewöhnliche geplante Jobs.