Cron-Ausdrücke erklärt: Syntax, Beispiele und gängige Muster
· 12 Min. Lesezeit
Cron ist der zeitbasierte Job-Scheduler, der die Automatisierung auf Unix-ähnlichen Betriebssystemen antreibt. Ob Sie Datenbanken sichern, geplante E-Mails versenden oder Wartungsskripte ausführen – das Verständnis von Cron-Ausdrücken ist für jeden Entwickler oder Systemadministrator unerlässlich.
Dieser umfassende Leitfaden erklärt alles, was Sie über Cron-Syntax wissen müssen, von grundlegenden Mustern bis hin zu fortgeschrittenen Planungstechniken. Sie lernen, wie Sie Cron-Ausdrücke selbstbewusst schreiben, testen und Fehler beheben.
Inhaltsverzeichnis
- Cron-Grundlagen verstehen
- Cron-Syntax: Die fünf Felder
- Sonderzeichen und Operatoren
- Gängige Cron-Muster
- Fortgeschrittene Planungstechniken
- Ihre Crontab verwalten
- Umgebungsvariablen und Pfade
- Häufige Fallstricke und wie man sie vermeidet
- Cron-Jobs debuggen
- Moderne Alternativen zu Cron
- Häufig gestellte Fragen
- Verwandte Artikel
Cron-Grundlagen verstehen
Cron ist ein Daemon-Prozess, der kontinuierlich im Hintergrund von Unix-ähnlichen Systemen läuft und jede Minute prüft, ob geplante Jobs auszuführen sind. Der Name stammt vom griechischen Wort „chronos", was Zeit bedeutet.
Jeder Benutzer auf einem System kann seine eigene Crontab-Datei (Cron-Tabelle) mit geplanten Jobs haben. Das System verwaltet auch Crontabs für systemweite Aufgaben in Verzeichnissen wie /etc/cron.d/, /etc/cron.daily/ und /etc/cron.hourly/.
Wenn ein Cron-Job ausgeführt wird, läuft er mit den Berechtigungen des Benutzers, dem die Crontab gehört. Dies ist entscheidend für Sicherheits- und Dateizugriffsüberlegungen. Der Job läuft in einer minimalen Umgebung ohne Ihre übliche Shell-Konfiguration, was eine häufige Quelle der Verwirrung für Anfänger ist.
Profi-Tipp: Cron-Jobs haben keinen Zugriff auf Ihre interaktive Shell-Umgebung. Verwenden Sie immer absolute Pfade für Befehle und Dateien und setzen Sie alle erforderlichen Umgebungsvariablen explizit in Ihrer Crontab.
Cron-Syntax: Die fünf Felder
Ein Standard-Cron-Ausdruck besteht aus fünf Zeit- und Datumsfeldern, gefolgt vom auszuführenden Befehl. Das Verständnis dieser Felder ist grundlegend für das Schreiben effektiver Cron-Zeitpläne.
┌───────────── Minute (0-59)
│ ┌───────────── Stunde (0-23)
│ │ ┌───────────── Tag des Monats (1-31)
│ │ │ ┌───────────── Monat (1-12 oder JAN-DEZ)
│ │ │ │ ┌───────────── Wochentag (0-7, 0 und 7 = Sonntag, oder SON-SAM)
│ │ │ │ │
* * * * * auszuführender Befehl
Jedes Feld akzeptiert bestimmte Werte und Sonderzeichen, die steuern, wann der Job ausgeführt wird. Lassen Sie uns aufschlüsseln, was jedes Feld darstellt:
| Feld | Bereich | Sonderzeichen | Beschreibung |
|---|---|---|---|
| Minute | 0-59 | * , - / | Die exakte Minute, zu der der Job läuft |
| Stunde | 0-23 | * , - / | Stunde im 24-Stunden-Format (0 = Mitternacht) |
| Tag des Monats | 1-31 | * , - / L W | Der Tag des Monats |
| Monat | 1-12 oder JAN-DEZ | * , - / | Monat des Jahres (1 = Januar) |
| Wochentag | 0-7 oder SON-SAM | * , - / L # | Tag der Woche (0 und 7 = Sonntag) |
Das Befehlsfeld kann jeder gültige Shell-Befehl, Skriptpfad oder eine Reihe von Befehlen sein, die durch Semikolons getrennt sind. Die Ausgabe von Cron-Jobs wird normalerweise per E-Mail an den Benutzer gesendet, sofern sie nicht umgeleitet wird.
Sonderzeichen und Operatoren
Die Stärke von Cron liegt in seinen Sonderzeichen, die flexible Planungsmuster ermöglichen. Die Beherrschung dieser Operatoren ermöglicht es Ihnen, ausgefeilte Zeitpläne ohne komplexe Logik zu erstellen.
Das Sternchen (*) - Alle Werte abgleichen
Das Sternchen ist das Platzhalterzeichen, das alle möglichen Werte für ein Feld abgleicht. Wenn Sie * in einem Feld verwenden, wird der Job für jeden Wert im Bereich dieses Feldes ausgeführt.
Zum Beispiel bedeutet * * * * * „jede Minute jeder Stunde jeden Tages jeden Monats an jedem Wochentag" – mit anderen Worten, jede einzelne Minute.
Das Komma (,) - Mehrere Werte auflisten
Kommas ermöglichen es Ihnen, mehrere diskrete Werte anzugeben. Dies ist nützlich, wenn Sie bestimmte, nicht aufeinanderfolgende Zeiten benötigen.
Beispiel: 0 9,12,15,18 * * * läuft um 9 Uhr, Mittag, 15 Uhr und 18 Uhr jeden Tag.
Der Bindestrich (-) - Bereiche definieren
Bindestriche erstellen inklusive Wertebereiche. Dies ist sauberer als das Auflisten vieler aufeinanderfolgender Werte mit Kommas.
Beispiel: 0 9-17 * * 1-5 läuft jede Stunde von 9 bis 17 Uhr, Montag bis Freitag (Geschäftszeiten).
Der Schrägstrich (/) - Schrittwerte
Der Schrägstrich-Operator gibt Schrittintervalle an. Die Syntax ist */n oder Bereich/n, wobei n der Schrittwert ist.
Beispiel: */15 * * * * läuft alle 15 Minuten (um :00, :15, :30, :45). Sie können auch Bereiche verwenden: 0-30/5 * * * * läuft alle 5 Minuten während der ersten Hälfte jeder Stunde.
Erweiterte Zeichen (L, W, #)
Dies sind nicht standardmäßige Erweiterungen, die von einigen Cron-Implementierungen wie Vixie Cron und dem Quartz-Scheduler unterstützt werden, aber nicht vom Standard-Unix-Cron.
| Zeichen | Bedeutung | Beispiel | Beschreibung |
|---|---|---|---|
L |
Letzter | 0 0 L * * |
Letzter Tag des Monats um Mitternacht |
W |
Wochentag | 0 0 15W * * |
Nächster Wochentag zum 15. |
# |
N-tes Vorkommen | 0 0 * * 5#3 |
Dritter Freitag jeden Monats |
Schneller Tipp: Bevor Sie die Zeichen L, W oder # verwenden, überprüfen Sie, ob Ihre Cron-Implementierung diese unterstützt. Standard-Unix-Cron wird diese Ausdrücke ablehnen. Verwenden Sie unseren Cron-Ausdrucks-Generator, um die Kompatibilität zu testen.
Gängige Cron-Muster
Hier sind die am häufigsten verwendeten Cron-Muster, denen Sie in realen Anwendungen begegnen werden. Diese decken die Mehrheit der Planungsanforderungen für typische Automatisierungsaufgaben ab.
Grundlegende Zeitintervalle
* * * * *- Jede Minute (sparsam verwenden, kann hohe Last erzeugen)*/5 * * * *- Alle 5 Minuten*/10 * * * *- Alle 10 Minuten*/15 * * * *- Alle 15 Minuten (üblich für Überwachungsskripte)*/30 * * * *- Alle 30 Minuten0 * * * *- Jede volle Stunde0 */2 * * *- Alle 2 Stunden0 */4 * * *- Alle 4 Stunden0 */6 * * *- Alle 6 Stunden (viermal täglich)
Tägliche Zeitpläne
0 0 * * *- Täglich um Mitternacht (üblich für Backups und Berichte)0 2 * * *- Täglich um 2:00 Uhr (verkehrsarme Zeit für Wartung)0 9 * * *- Täglich um 9:00 Uhr (Beginn der Geschäftszeiten)30 4 * * *- Täglich um 4:30 Uhr0 0,12 * * *- Zweimal täglich um Mitternacht und Mittag0 8,20 * * *- Zweimal täglich um 8 Uhr und 20 Uhr
Wöchentliche Zeitpläne
0 0 * * 0- Wöchentlich am Sonntag um Mitternacht0 0 * * 1- Wöchentlich am Montag um Mitternacht0 9 * * 1-5- Wochentags um 9:00 Uhr0 0 * * 6,0- Wochenenden (Samstag und Sonntag) um Mitternacht30 4 * * 1- Jeden Montag um 4:30 Uhr (wöchentliche Berichte)0 8-17 * * 1-5- Jede Stunde während der Geschäftszeiten (9-17 Uhr, Mo-Fr)
Monatliche und jährliche Zeitpläne
0 0 1 * *- Erster Tag jeden Monats um Mitternacht0 0 15 * *- 15. jeden Monats um Mitternacht0 0 1,15 * *- 1. und 15. jeden Monats (zweiwöchentlich)0 0 * * 0- Jeden Sonntag (wöchentlich)0 0 1 1 *- 1. Januar um Mitternacht (jährlich)0 0 1 */3 *- Erster Tag jedes Quartals (Jan, Apr, Jul, Okt)0 0 1 6,12 *- 1. Juni und 1. Dezember (halbjährlich)
Profi-Tipp: Seien Sie bei der Planung monatlicher Jobs vorsichtig mit Tag-des-Monats-Werten über 28. Die Verwendung von 0 0 31 * * wird nur in Monaten mit 31 Tagen ausgeführt. Für Monatsende-Jobs sollten Sie stattdessen den letzten Tag des vorherigen Monats oder den ersten Tag des nächsten Monats verwenden.
Testen und validieren Sie Ihre Cron-Ausdrücke mit unserem Cron-Ausdrucks-Parser, um genau zu sehen, wann Ihre Jobs ausgeführt werden.
Fortgeschrittene Planungstechniken
Über grundlegende Muster hinaus können Sie Operatoren und Felder kombinieren, um ausgefeilte Zeitpläne zu erstellen, die komplexen Geschäftsanforderungen entsprechen.
Mehrere Bedingungen kombinieren
Sie können mehrere Operatoren in einem einzelnen Feld verwenden, um nuancierte Zeitpläne zu erstellen. Zum Beispiel läuft 0 9,12,15 * * 1-5 um 9 Uhr, Mittag und 15 Uhr, aber nur an Wochentagen.
Ein weiteres Beispiel: */10 8-17 * * 1-5 läuft alle 10 Minuten, aber nur während der Geschäftszeiten (8-17 Uhr) an Wochentagen.
Tag des Monats vs. Wochentag
Wenn sowohl Tag-des-Monats als auch Wochentag angegeben sind (nicht *), wird der Job ausgeführt, wenn eine der beiden Bedingungen erfüllt ist (ODER-Logik, nicht UND). Dies ist eine häufige Quelle der Verwirrung.
Zum Beispiel läuft 0 0 13 * 5 um Mitternacht am 13. jeden Monats ODER jeden Freitag, nicht nur an Freitag dem 13.
Um etwas speziell für Freitag den 13. zu planen, müssten Sie ein Skript verwenden, das beide Bedingungen prüft:
0 0 13 * * [ $(date +\%u) -eq 5 ] && /pfad/zum/skript.sh
Schrittwerte mit Bereichen verwenden
Sie können Bereiche und Schrittwerte für präzise Kontrolle kombinieren. Die Syntax Start-Ende/Schritt läuft in Intervallen innerhalb eines bestimmten Bereichs.
Beispiele:
0-30/5 * * * *- Alle 5 Minuten während der ersten Hälfte jeder Stunde (:00, :05, :10, :15, :20, :25, :30)0 9-17/2 * * *- Alle 2 Stunden von 9 bis 17 Uhr (9, 11, 13, 15, 17 Uhr)0 0 1-7 * 1- Erster Montag jeden Monats (läuft am 1. bis 7., wenn es ein Montag ist)