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 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

Tägliche Zeitpläne

Wöchentliche Zeitpläne

Monatliche und jährliche Zeitpläne

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: