Der Cron Ausdruck 0 0 * * 1-5 läuft Montag bis Freitag. Deckt den Bereich 1-5, Aliase MON-FRI, Feiertags Workarounds und Geschäftszeiten Muster ab.
⏰At 12:00 AM, Monday through Friday
*Beliebiger Wert,Listentrennzeichen-Bereich/Schritt1-5Bereich 1 bis 5*/15Alle 15 EinheitenDer Cron Ausdruck 0 0 * * 1-5 löst um Mitternacht, Montag bis Freitag aus. Feldaufschlüsselung: Minute (0), Stunde (0), Tag des Monats (*), Monat (*), Wochentag (1-5). Mitternacht an Werktagen ist eine übliche Basis. Die meisten Teams passen das Stundenfeld an ihre tatsächlichen Bedürfnisse an. Das Kernkonzept hier ist der Bereich 1-5 im Wochentagsfeld, was diese Seite lesenswert macht, unabhängig davon, welche Uhrzeit du einstellst.
Der Wochentag im POSIX Cron ist das fünfte Feld und verwendet die folgende Nummerierung:
| Nummer | Tag |
|---|---|
| 0 | Sonntag |
| 1 | Montag |
| 2 | Dienstag |
| 3 | Mittwoch |
| 4 | Donnerstag |
| 5 | Freitag |
| 6 | Samstag |
| 7 | Sonntag (Alias) |
Der Bereich 1-5 trifft Montag bis Freitag. Samstag (6) und Sonntag (0 oder 7) sind ausgeschlossen. Dies ist der Mechanismus hinter jedem “nur an Geschäftstagen ausführen” Cron Ausdruck, dem du begegnen wirst.
In Vixie cron und den meisten modernen Implementierungen funktionieren dreibuchstabige Abkürzungen im Wochentagsfeld:
0 0 * * MON-FRI # identisch zu 0 0 * * 1-5
0 0 * * MON,WED,FRI # nur Montag, Mittwoch, Freitag
0 0 * * TUE,THU # Dienstag und Donnerstag
Benannte Aliase verbessern die Lesbarkeit in gemeinsam genutzten crontabs. Sie funktionieren in cronie (dem Standard auf RHEL/CentOS/Fedora), Vixie cron (Debian/Ubuntu) und den meisten verwalteten Cloud Schedulern. Wenn die Portabilität über minimale oder eingebettete Cron Implementierungen wichtig ist, verwende Zahlen.
Der Hauptgrund ist die menschliche Verfügbarkeit. Automatisierte Systeme, die benachrichtigen, alarmieren oder bereitstellen, sollten berücksichtigen, ob jemand in der Nähe ist, um zu reagieren. Häufige Fälle:
Rechnungserstellung, Berichtsverteilung und Datenabgleichsjobs, die in Workflows einfließen, an denen Menschen täglich arbeiten, müssen nicht am Wochenende laufen, wenn die Ausgabe ungelesen bis Montag liegen bleibt.
Viele Teams schränken Produktionsbereitstellungen auf Werktage ein, damit ein Ingenieur verfügbar ist, um bei Problemen zurückzusetzen. Ein Bereitschaftsalarm um 2 Uhr Samstag ist weniger nützlich, wenn das Team bis Montag nicht verfügbar ist.
Wenn ein Job nachgelagerte Verarbeitung, API Aufrufe oder externe Dienste auslöst, spart der Betrieb an fünf statt sieben Tagen pro Woche etwa 28% der Betriebskosten für diese Komponente.
Jobs, die an Geschäfts SLAs gebunden sind (Zahlungsverarbeitungsfenster, Tagesabschlussabstimmung, Geschäftszeiten Berichte), sind von Natur aus nur an Werktagen aktiv, da das zugrunde liegende SLA es ist.
Cron hat keine Kenntnis von gesetzlichen Feiertagen. Ein mit 1-5 geplanter Job wird an Weihnachten und Neujahr ausgeführt, wenn sie auf einen Werktag fallen. Wenn das ein Problem ist, liegt die Lösung auf der Anwendungsebene:
#!/bin/bash
# Feiertagsliste vor der Ausführung überprüfen
FEIERTAGS_DATEI="/etc/feiertage.txt"
HEUTE=$(date +%Y-%m-%d)
if grep -q "$HEUTE" "$FEIERTAGS_DATEI"; then
echo "Überspringe: $HEUTE ist ein Feiertag"
exit 0
fi
# Den eigentlichen Job ausführen
/opt/jobs/business-report
Verwalte die Feiertagsdatei als Teil deiner Infrastrukturkonfiguration. Einige Teams generieren sie jährlich aus einer Kalender API (wie der Google Calendar API oder einer länderspezifischen Feiertags API) und stellen sie zusammen mit ihren crontabs bereit.
Die Basis 0 0 * * 1-5 wird fast immer angepasst. Dies sind die Muster, die tatsächlich in Produktions crontabs vorkommen:
Täglicher Job zu einer bestimmten Geschäftszeit:
0 9 * * 1-5 # 9 Uhr Werktage, Morgenjob vor dem Standup
0 6 * * 1-5 # 6 Uhr Werktage, Daten vorbereiten vor Geschäftsbeginn
0 18 * * 1-5 # 18 Uhr Werktage, Tagesabschlussverarbeitung
Intervall innerhalb der Geschäftszeiten:
*/15 9-17 * * 1-5 # alle 15 Min, 9 bis 17 Uhr, Werktage
*/30 8-18 * * 1-5 # alle 30 Min während erweiterter Geschäftszeiten
0 * 9-17 * * 1-5 # zu jeder vollen Stunde während der Geschäftszeiten
Mehrere feste Zeiten an Werktagen:
0 9,12,17 * * 1-5 # 9 Uhr, 12 Uhr und 17 Uhr Werktage
0 8,16 * * 1-5 # zweimal täglich zu Schichtgrenzen
Nur Montag oder nur Freitag:
0 0 * * 1 # Mitternacht Montag, wöchentlicher Startjob
0 23 * * 5 # 23 Uhr Freitag, Wochenendbereinigung vor dem Wochenende
Ein wichtiger Cron Randfall: Wenn sowohl das Tag des Monats Feld als auch das Wochentagsfeld explizit gesetzt sind (keines ist *), führt Cron den Job auf der Vereinigungsmenge beider Einschränkungen aus, nicht auf der Schnittmenge.
0 0 15 * 1-5 # läuft am 15. jedes Monats UND an jedem Werktag
Dies bedeutet nicht “Werktage, die auf den 15. fallen.” Es bedeutet “jeden Werktag plus den 15. jedes Monats.” Wenn du die Ausführung auf eine bestimmte Kombination beschränken möchtest, benötigst du Skriptlogik, keinen komplexeren Cron Ausdruck.
Bei 0 0 * * 1-5 ist der Tag des Monats *, daher trifft dieser Randfall nicht zu.
from croniter import croniter
from datetime import datetime
cron = croniter("0 0 * * 1-5", datetime.now())
for _ in range(7):
print(cron.get_next(datetime))
Führe 7 Iterationen durch und du wirst sehen, dass der Zeitplan Samstag und Sonntag überspringt. Verwende den Cron Builder auf dieser Seite, um die nächsten 10 Laufzeiten interaktiv anzuzeigen.
0 9 * * 1-5 für einen festen Morgenjob0 0 * * *, wenn auch Wochenenden zählenNothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.