Cron-Ausdrücke erklärt: Vollständiger Syntax-Leitfaden
· 12 Min. Lesezeit
📑 Inhaltsverzeichnis
Cron ist der zeitbasierte Job-Scheduler in Unix-ähnlichen Betriebssystemen. Wenn Sie ein Skript um Mitternacht ausführen, jeden Sonntag eine Datenbank sichern, stündlich temporäre Dateien löschen oder am Ersten jedes Monats Berichte versenden müssen, ist Cron Ihr Werkzeug. Aber seine Ausdruckssyntax – diese kryptischen Zeichenfolgen wie 0 */6 * * 1-5 – kann anfangs einschüchternd sein.
Dieser Leitfaden entmystifiziert Cron-Ausdrücke vollständig. Sie lernen jedes Feld, jedes Sonderzeichen kennen, sehen Dutzende realer Muster und verstehen die Zeitzonen-Fallstricke, über die selbst erfahrene Entwickler stolpern. Ob Sie Backups planen, Wartungsskripte ausführen oder Berichte automatisieren – die Beherrschung der Cron-Syntax ist für jeden Entwickler oder Systemadministrator unerlässlich.
Anatomie eines Cron-Ausdrucks
Ein Standard-Cron-Ausdruck hat fünf durch Leerzeichen getrennte Felder. Jedes Feld repräsentiert eine Zeiteinheit, und zusammen definieren sie genau, wann Ihr Job ausgeführt werden soll.
┌───────────── Minute (0-59)
│ ┌─────────── Stunde (0-23)
│ │ ┌───────── Tag des Monats (1-31)
│ │ │ ┌─────── Monat (1-12)
│ │ │ │ ┌───── Wochentag (0-6, So=0)
│ │ │ │ │
* * * * * auszuführender Befehl
Jedes Feld kann eine Zahl, einen Bereich, eine Liste, einen Schrittwert oder ein Platzhalterzeichen enthalten. Die Schönheit von Cron liegt darin, dass diese einfachen Bausteine sich zu unglaublich flexiblen Planungsmustern kombinieren lassen.
Einige Cron-Implementierungen unterstützen ein sechstes Feld für Sekunden und ein siebtes für das Jahr, aber das Standard-Fünf-Felder-Format wird universell unterstützt und ist das, was Sie in den meisten Unix-ähnlichen Systemen einschließlich Linux, macOS und BSD-Varianten antreffen werden.
Die fünf Felder im Detail
Das Verständnis des Bereichs und Verhaltens jedes Feldes ist entscheidend für das Schreiben korrekter Cron-Ausdrücke. Lassen Sie uns jedes systematisch untersuchen.
| Feld | Bereich | Sonderzeichen | Beispiel |
|---|---|---|---|
| Minute | 0-59 | * , - / | */15 (alle 15 Min.) |
| Stunde | 0-23 | * , - / | 9-17 (9 bis 17 Uhr) |
| Tag des Monats | 1-31 | * , - / L W | 1,15 (1. und 15.) |
| Monat | 1-12 oder JAN-DEZ | * , - / | 1-6 (Jan bis Jun) |
| Wochentag | 0-6 oder SO-SA | * , - / L # | 1-5 (Mo bis Fr) |
Minutenfeld (0-59)
Das Minutenfeld steuert, in welcher Minute der Stunde Ihr Job ausgeführt wird. Ein Wert von 0 bedeutet zur vollen Stunde, 30 bedeutet halb, und 59 ist die letzte Minute der Stunde.
Häufige Muster sind */5 für alle 5 Minuten, 0,30 für zweimal pro Stunde oder 15 für Viertel nach jeder Stunde.
Stundenfeld (0-23)
Stunden verwenden das 24-Stunden-Format, wobei 0 Mitternacht ist, 12 Mittag und 23 23 Uhr. Dies ist eine der häufigsten Verwechslungsquellen für Entwickler, die an die 12-Stunden-AM/PM-Notation gewöhnt sind.
Geschäftszeiten werden typischerweise als 9-17 (9 bis 17 Uhr) dargestellt, während nächtliche Wartung 0-6 (Mitternacht bis 6 Uhr) verwenden könnte.
Tag-des-Monats-Feld (1-31)
Dieses Feld gibt an, an welchem Tag des Monats ausgeführt werden soll. Gültige Werte sind 1 bis 31, obwohl nicht alle Monate 31 Tage haben. Cron handhabt dies elegant – wenn Sie Tag 31 im Februar angeben, wird der Job in diesem Monat einfach nicht ausgeführt.
Das Sonderzeichen L bedeutet "letzter Tag des Monats" und passt sich automatisch an Monatslänge und Schaltjahre an.
Monatsfeld (1-12)
Monate können numerisch angegeben werden (1 für Januar bis 12 für Dezember) oder mit dreistelligen Abkürzungen (JAN, FEB, MAR usw.). Die Abkürzungen sind in den meisten Implementierungen nicht case-sensitiv.
Vierteljährliche Zeitpläne verwenden oft Muster wie 1,4,7,10 (Januar, April, Juli, Oktober) oder 3,6,9,12 für Quartalsenden.
Wochentagsfeld (0-6)
Wochentage reichen von 0 (Sonntag) bis 6 (Samstag). Einige Systeme akzeptieren auch 7 als Sonntag zur Vereinfachung. Dreistellige Abkürzungen (SO, MO, DI usw.) werden ebenfalls unterstützt.
Das häufigste Muster ist 1-5 für Wochentage (Montag bis Freitag), während 0,6 oder 6,0 Wochenenden darstellt.
Profi-Tipp: Wenn sowohl Tag des Monats als auch Wochentag angegeben sind (keine Platzhalter), wird der Job ausgeführt, wenn eine der beiden Bedingungen erfüllt ist (ODER-Logik), nicht beide. Dies überrascht viele Entwickler. Zum Beispiel läuft 0 0 13 * 5 am 13. jedes Monats und jeden Freitag, nicht nur an Freitag dem 13.
Sonderzeichen erklärt
Sonderzeichen verleihen Cron-Ausdrücken ihre Kraft und Flexibilität. Jedes Zeichen dient einem bestimmten Zweck bei der Definition von Planungsmustern.
Sternchen (*) - Platzhalter
Das Sternchen bedeutet "jeder mögliche Wert" für dieses Feld. Es ist das am häufigsten verwendete Sonderzeichen und erscheint in fast jedem Cron-Ausdruck.
* * * * *— Jede Minute jeden Tages ausführen0 * * * *— Zur vollen Stunde ausführen0 0 * * *— Um Mitternacht jeden Tag ausführen
Komma (,) - Listentrennzeichen
Kommas ermöglichen die Angabe mehrerer diskreter Werte. Dies ist perfekt, wenn Sie bestimmte, nicht aufeinanderfolgende Zeiten benötigen.
0 9,12,15,18 * * *— Um 9, 12, 15 und 18 Uhr ausführen0 0 1,15 * *— Um Mitternacht am 1. und 15. jedes Monats ausführen0 0 * * 1,3,5— Um Mitternacht am Montag, Mittwoch und Freitag ausführen
Bindestrich (-) - Bereichsoperator
Bindestriche definieren inklusive Bereiche und erleichtern die Angabe kontinuierlicher Zeiträume.
0 9-17 * * *— Jede Stunde von 9 bis 17 Uhr ausführen0 0 * * 1-5— Um Mitternacht Montag bis Freitag ausführen0 0 1-7 1 *— Täglich während der ersten Woche im Januar ausführen
Schrägstrich (/) - Schrittwerte
Der Schrägstrich gibt Schrittintervalle an und ermöglicht die Ausführung von Jobs in regelmäßigen Abständen innerhalb eines Bereichs. Die Syntax ist start/schritt oder */schritt für den gesamten Bereich.
*/15 * * * *— Alle 15 Minuten (0, 15, 30, 45)0 */2 * * *— Alle 2 Stunden (0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22)0 0 */3 * *— Alle 3 Tage (1., 4., 7., 10. usw.)0 9-17/2 * * *— Alle 2 Stunden zwischen 9 und 17 Uhr (9, 11, 13, 15, 17)
Schneller Tipp: */15 bedeutet nicht "alle 15 Minuten ab jetzt" – es bedeutet zu den Minuten 0, 15, 30 und 45 jeder Stunde. Wenn Sie einen Cron-Job um 10:07 hinzufügen, wird ein */15-Muster zuerst um 10:15 ausgeführt, nicht um 10:22.
L - Letzter Tag
Das Zeichen L bedeutet "letzter" und wird in den Feldern Tag des Monats und Wochentag verwendet. Es ist besonders nützlich für Monatsendverarbeitung, die unterschiedliche Monatslängen berücksichtigen muss.
0 0 L * *— Um Mitternacht am letzten Tag jedes Monats ausführen0 0 * * L— Um Mitternacht am letzten Tag der Woche (Samstag) ausführen0 0 * * 5L— Am letzten Freitag jedes Monats ausführen
W - Nächster Wochentag
Das Zeichen W findet den nächsten Wochentag zu einem bestimmten Tag des Monats. Wenn der angegebene Tag auf ein Wochenende fällt, wird der Job stattdessen am nächsten Wochentag ausgeführt.
0 0 15W * *— Am Wochentag, der dem 15. am nächsten liegt, ausführen0 0 1W * *— Am ersten Wochentag des Monats ausführen0 0 LW * *— Am letzten Wochentag des Monats ausführen
Raute (#) - N-ter Wochentag
Das Rautezeichen gibt das N-te Vorkommen eines Wochentags innerhalb eines Monats an. Die Syntax ist tag#vorkommen.
0 0 * * 1#1— Erster Montag jedes Monats0 0 * * 5#2— Zweiter Freitag jedes Monats0 0 * * 3#4— Vierter Mittwoch jedes Monats
Beachten Sie, dass L, W und # nicht in allen Cron-Implementierungen unterstützt werden. Sie sind in modernen Versionen wie Vixie Cron und den meisten Cloud-basierten Schedulern verfügbar, funktionieren aber möglicherweise nicht in älteren Unix-Systemen.
Häufige Cron-Muster
Schauen wir uns reale Planungsmuster an, die Sie regelmäßig verwenden werden. Diese Beispiele decken die häufigsten Automatisierungsszenarien ab.
Jede Minute, Stunde und Tag
* * * * *— Jede Minute (sparsam verwenden, kann Lastprobleme verursachen)0 * * * *— Jede Stunde zur Minute 00 0 * * *— Jeden Tag um Mitternacht0 12 * * *— Jeden Tag um Mittag
Mehrmals täglich
0 0,12 * * *— Zweimal täglich um Mitternacht und Mittag0 */6 * * *— Alle 6 Stunden (0:00, 6:00, 12:00, 18:00)0 8,12,16,20 * * *— Viermal täglich zu bestimmten Stunden*/30 * * * *— Alle 30 Minuten
Wöchentliche Zeitpläne
0 0 * * 0— Jeden Sonntag um Mitternacht0 0 * * 1-5— Wochentags um Mitternacht0 9 * * 1— Jeden Montag um 9 Uhr0 0 * * 6,0— Wochenenden um Mitternacht
Monatliche Zeitpläne
0 0 1 * *— Erster Tag jedes Monats um Mitternacht0 0 L * *— Letzter Tag jedes Monats um Mitternacht0 0 1,15 * *— 1. und 15. jedes Monats0 0 1 */3 *— Erster Tag jedes Quartals (Jan, Apr, Jul, Okt)
Geschäftszeiten und Wartungsfenster
0 9-17 * * 1-5— Jede Stunde während der Geschäftszeiten (9-17 Uhr, Mo-Fr)*/15 9-17 * * 1-5— Alle 15 Minuten während der Geschäftszeiten0 2 * * *— Täglich um 2 Uhr (übliches Wartungsfenster)0 3 * * 0— Jeden Sonntag um 3 Uhr (wöchentliche Wartung)
| Anwendungsfall | Cron-Ausdruck | Beschreibung |
|---|---|---|
| Datenbank-Backup | 0 2 * * * |
Täglich um 2 Uhr |
| Log-Rotation | 0 0 * * 0 |
Wöchentlich Sonntag Mitternacht |
| Cache-Löschung |