Der Ausdruck 0 0 * * 1
Der Cron Ausdruck 0 0 * * 1 löst um Mitternacht jeden Montag aus. Felder: Minute (0), Stunde (0), Tag des Monats (*), Monat (*), Wochentag (1). Montag ist Tag 1 im POSIX Cron. Diese Nummerierung verwirrt Entwickler, die von ISO 8601 oder Programmiersprachen kommen, die Tage anders nummerieren. Überprüfe die folgende Tabelle, bevor du einen wöchentlichen Zeitplan schreibst.
Wochentagsnummerierung im POSIX Cron
Das Wochentagsfeld verwendet ganzzahlige Werte von 0 bis 7:
| Nummer | Tag |
|---|---|
| 0 | Sonntag |
| 1 | Montag |
| 2 | Dienstag |
| 3 | Mittwoch |
| 4 | Donnerstag |
| 5 | Freitag |
| 6 | Samstag |
| 7 | Sonntag (Alias für 0) |
Sonntag erscheint zweimal (als 0 und 7), um Eins-fehler in Bereichsausdrücken zu reduzieren. 1-7 würde sonst Sonntag verpassen, wenn 7 nicht verfügbar wäre. In der Praxis benötigst du diesen Randfall selten, aber es ist gut zu wissen, dass beide Werte gültig sind.
Montag ist immer 1. Dies unterscheidet sich von ISO 8601 (das Montag als Wochenbeginn behandelt, ihn aber ebenfalls als 1 nummeriert), gerät aber mit einigen Programmiersprachen und Bibliotheken in Konflikt, die Tage anders nummerieren. Beim Schreiben von crontab Ausdrücken beziehe dich immer auf diese Tabelle, nicht auf dein mentales Modell aus einem anderen Tool.
Der MON Alias
0 0 * * MON # identisch zu 0 0 * * 1
Benannte Tagesaliase (MON, DIE, MIT, DON, FRE, SAM, SON) funktionieren in den meisten Produktions Cron Implementierungen. Sie funktionieren in Listen und Bereichen:
0 0 * * MON,MIE # Montag und Mittwoch
0 0 * * MON-FRE # Montag bis Freitag
0 9 * * MON,DON # 9 Uhr am Montag und Donnerstag
Wenn du crontabs schreibst, die über verschiedene Systeme kopiert oder von Konfigurationsmanagement Tools bereitgestellt werden, sind Zahlen sicherer. Benannte Aliase sind eine Bequemlichkeit, kein Standard.
Anwendungsfälle für wöchentliche Montagsjobs
Montag als Auslösepunkt passt natürlich dazu, wie die meisten Teams ihre Arbeitswoche strukturieren. Häufige reale Verwendungen:
Wochenberichte
Generiere und verteile wöchentliche Metriken, KPI Zusammenfassungen oder Betriebsübersichten jeden Montagmorgen, damit sie vor dem Standup bereit sind. Ein Job um 0 6 * * 1 stellt sicher, dass der Bericht erstellt und zugestellt ist, bevor jemand seinen Laptop öffnet.
Sprint Start Automatisierung
Für Teams mit zweiwöchigen Sprint Zyklen, bei denen Sprints montags beginnen, kann ein Montags Cron Zähler zurücksetzen, Sprint Planungsvorlagen generieren, Tracking Tickets erstellen oder Daten aus Projektmanagement Tools in interne Dashboards synchronisieren.
Backup Rotation
Eine übliche Backup Strategie: tägliche inkrementelle Backups mit wöchentlichen Vollbackups am Montag. Das montägliche Vollbackup markiert die Grenze der Inkremente der Vorwoche und macht Wiederherstellungsfenster vorhersagbar.
Newsletter Versand
Automatisierte E-Mail oder Slack Newsletter Digests (neue Tool Veröffentlichungen, Engineering Blog Zusammenfassungen, Incident Postmortems) werden oft für Montagmorgen geplant, damit Empfänger sie zu Wochenbeginn sehen.
Cache Warming
Wenn du Caches hast, die über das Wochenende veralten (Benutzerverhaltensmodelle, Empfehlungsmaschinen, vorberechnete Berichte), stellt ein montäglicher Vorwärmjob sicher, dass das System bereit ist, bevor der Verkehr ansteigt.
Eine bestimmte Uhrzeit am Montag angeben
0 0 * * 1 # Mitternacht Montag (Start des Montags)
0 6 * * 1 # 6 Uhr Montag, Job läuft, wird vor dem Standup fertig
0 9 * * 1 # 9 Uhr Montag, Morgenauslöser
0 17 * * 1 # 17 Uhr Montag, Ende des ersten Geschäftstages der Woche
30 23 * * 1 # 23:30 Uhr Montag, späte Bereinigung vor Dienstag
Für Jobs, die vor einer bestimmten Zeit abgeschlossen sein müssen, berücksichtige die Jobdauer. Wenn dein Montag 9 Uhr Bericht 90 Minuten zur Generierung braucht, plane ihn stattdessen um 6 oder 7 Uhr.
Mehrere Tage pro Woche
Das Wochentagsfeld akzeptiert kommagetrennte Werte für nicht aufeinanderfolgende Tage:
0 0 * * 1,3,5 # Montag, Mittwoch, Freitag, jeder zweite Werktag
0 0 * * 1,4 # Montag und Donnerstag, zweimal pro Woche
0 9 * * 1,2,3,4,5 # äquivalent zu 0 9 * * 1-5 (Werktage), als Liste geschrieben
Für einen Job, der montags und auch am 1. jedes Monats laufen soll, beachte das dom/dow Vereinigungsverhalten (siehe nächster Abschnitt).
Der dom/dow Vereinigungsrandfall
Wenn du einen Nicht-* Wert sowohl im Tag des Monats als auch im Wochentagsfeld angibst, löst Cron auf der Vereinigungsmenge beider Einschränkungen aus:
0 0 1 * 1 # löst am 1. jedes Monats UND jeden Montag aus
Dies ist nicht “erster Montag des Monats.” Dafür wäre Skriptlogik erforderlich. Der obige Ausdruck läuft am 1. unabhängig vom Wochentag und läuft auch jeden Montag unabhängig vom Datum. Wenn du nur Montage möchtest, behalte den Tag des Monats als *.
Andere Tagesnummern als Referenz
Für den Kontext beim Schreiben kombinierter Ausdrücke:
0 0 * * 1 # jeden Montag
0 0 * * 2 # jeden Dienstag
0 0 * * 3 # jeden Mittwoch
0 0 * * 4 # jeden Donnerstag
0 0 * * 5 # jeden Freitag
0 0 * * 6 # jeden Samstag
0 0 * * 0 # jeden Sonntag
Die häufigsten Paarungen für nicht tägliche wiederkehrende Jobs sind nur Montag (wöchentlich), Montag+Donnerstag (zweimal pro Woche) und Montag+Mittwoch+Freitag (dreimal pro Woche).
Den Zeitplan überprüfen
from croniter import croniter
from datetime import datetime
cron = croniter("0 0 * * 1", datetime.now())
for _ in range(5):
print(cron.get_next(datetime))
Jede Ausgabe sollte ein Montag um 00:00:00 sein. Verwende den Cron Builder auf dieser Seite, um die nächsten 10 Laufzeiten zu sehen und den Zeitplan vor der Bereitstellung zu bestätigen.