0 9 * * 1-5 lässt den Auftrag um 09:00 Uhr von Montag bis Freitag laufen und bleibt am Wochenende still. Das letzte Feld trägt den Wochentagsbereich: Cron zählt den Sonntag als 0, also steht 1-5 für Montag bis Freitag. Das Tagesfeld bleibt ein Stern, damit sich die beiden Tagesfelder nicht ins Gehege kommen.
Wie zählt Cron die Wochentage?
Von Sonntag als 0 bis Samstag als 6 – und die 7 gilt zusätzlich als Sonntag, 0 und 7 meinen also denselben Tag. Diese Doppelbedeutung stammt aus uneinigen Unix-Varianten und ist der Grund, warum ein Bereich wie 5-7 erlaubt ist, 7-1 dagegen ein Fehler. Die Kürzel SUN bis SAT und MON-FRI verstehen alle verbreiteten Umsetzungen.
Kennt Cron Feiertage?
Nein. Es gibt in Cron nirgends einen Feiertagskalender, ein werktäglicher Bericht landet also auch am 3. Oktober oder 1. Mai in einem leeren Büro. Üblich ist eine Abfrage im Skript: das Datum in einer Feiertagsliste nachschlagen und sich sonst sofort beenden. Die Prüfung im Skript statt im Plan hat den Vorteil, dass sie jedes Jahr nur an einer Stelle gepflegt werden muss.
Warum sollte das Tagesfeld ein Stern bleiben?
Weil Cron von UND auf ODER umschaltet, sobald beide Tagesfelder eingeschränkt sind: 0 9 1 * 1-5 bedeutet nicht „am Ersten, sofern er ein Werktag ist“, sondern „am Ersten und an jedem Werktag“. Die Handbuchseite crontab(5) sagt das ausdrücklich, und es ist die am häufigsten falsch gelesene Regel der ganzen Syntax.
So trägst du den Ausdruck ein
- Den Wochentagsbereich ins fünfte Feld schreiben, entweder als 1-5 oder als MON-FRI.
- Das Tagesfeld auf Stern lassen, sonst greift die ODER-Regel.
- Die Zeile 0 9 * * 1-5 samt Befehl eintragen und die Crontab speichern.
- Spielen Feiertage eine Rolle, oben im Skript eine Datumsprüfung ergänzen statt den Plan zu ändern.