Crontab-Syntax: Ein umfassendes Handbuch für die Planung von Cron-Jobs

Foto des Autors

By Jan

Crontab-Syntax: Die Grundlagen

Crontab ist ein Befehlszeilendienstprogramm zum Planen von regelmäßigen Aufgaben (Cron-Jobs) unter Unix-ähnlichen Betriebssystemen wie Linux und macOS. Die Crontab-Syntax ist eine einfache, aber leistungsstarke Möglichkeit, die Ausführung bestimmter Befehle und Skripte zu automatisieren.

Was ist Crontab?

Crontab ist ein Daemon (Hintergrundprozess), der die crontab-Datei jedes Benutzers regelmäßig überprüft. Die crontab-Datei enthält eine Liste von Cron-Jobs, die zusammen mit ihrem Ausführungsplan definiert sind. Der Cron-Daemon führt jeden Job gemäß dem vorgegebenen Zeitplan aus.

Crontab-Datei

Jeder Benutzer hat seine eigene crontab-Datei, die sich in ~/.crontab befindet. Diese Datei enthält die Definitionen der Cron-Jobs. Eine typische crontab-Datei sieht wie folgt aus:

# Minute    Stunde    Tag     Monat    Wochentag    Befehl
*          *          *          *          *           /bin/bash /home/user/script.sh

Cronjob-Aufbau

Jeder Cron-Job besteht aus sechs Feldern, die durch Leerzeichen getrennt sind:

  • Minute: Die Minute, in der der Job ausgeführt werden soll (0-59)
  • Stunde: Die Stunde, in der der Job ausgeführt werden soll (0-23)
  • Tag: Der Tag des Monats, an dem der Job ausgeführt werden soll (1-31)
  • Monat: Der Monat, in dem der Job ausgeführt werden soll (1-12)
  • Wochentag: Der Wochentag, an dem der Job ausgeführt werden soll (0-6, wobei 0 Sonntag ist)
  • Befehl: Der auszuführende Befehl oder das auszuführende Skript

Sonderzeichen

Crontab-Ausdrücke können auch Sonderzeichen verwenden, um komplexe Zeitpläne zu definieren:

  • *: Entspricht "jeder"
  • ,: Trennt Werte
  • -: Gibt einen Bereich an
  • /: Gibt ein Intervall an

Häufigkeitsspezifikationen: Zeitsteuerung für Jobs

Die Häufigkeitsspezifikationen in Crontab ermöglichen dir die Steuerung der Laufzeit deiner Jobs. Diese Spezifikationen bestehen aus fünf Feldern, die Minute, Stunde, Tag, Monat und Wochentag darstellen. Jedes Feld kann bestimmte Werte oder Kombinationen von Werten enthalten, um die gewünschte Häufigkeit zu definieren.

Minute: *** (Sternchen) *** oder 0-59

Dieses Feld gibt die Minuten an, in denen der Job ausgeführt werden soll. Du kannst ein Sternchen (*) verwenden, um jede Minute zu spezifizieren oder einen Bereich von Minuten angeben, z. B. 0-30 für die ersten 30 Minuten jeder Stunde.

Stunde: *** (Sternchen) *** oder 0-23

Dieses Feld gibt die Stunden an, in denen der Job ausgeführt werden soll. Auch hier kannst du ein Sternchen verwenden, um jede Stunde zu spezifizieren oder einen Bereich von Stunden angeben, z. B. 6-18, um den Job zwischen 6 Uhr morgens und 6 Uhr abends auszuführen.

Tag: *** (Sternchen) *** oder 1-31

Dieses Feld legt die Tage des Monats fest, an denen der Job ausgeführt werden soll. Du kannst ein Sternchen verwenden, um jeden Tag zu spezifizieren oder einen Bereich von Tagen angeben, z. B. 1-15 für die ersten 15 Tage des Monats.

Monat: *** (Sternchen) *** oder 1-12

Dieses Feld definiert die Monate, in denen der Job ausgeführt werden soll. Du kannst ein Sternchen verwenden, um jeden Monat zu spezifizieren oder einen Bereich von Monaten angeben, z. B. 3-6, um den Job zwischen März und Juni auszuführen.

Wochentag: *** (Sternchen) *** oder 0-7

Dieses Feld legt fest, an welchen Wochentagen der Job ausgeführt werden soll. Dabei entspricht 0 Sonntag und 7 Samstag. Du kannst ein Sternchen verwenden, um jeden Wochentag zu spezifizieren oder einen Bereich von Wochentagen angeben, z. B. 1-5, um den Job montags bis freitags auszuführen.

Spezielle Felder: Minute, Stunde, Tag, Monat, Wochentag

Die Crontab-Syntax verwendet fünf spezielle Felder, um die Ausführungszeit von Jobs zu definieren: Minute, Stunde, Tag, Monat und Wochentag. Mit diesen Feldern kannst du präzise Zeitpläne für deine Aufgaben festlegen.

Minute (0-59)

Das Minutenfeld spezifiziert die Minute der Stunde, zu der der Job ausgeführt werden soll. Du kannst einen Bereich von Minuten oder eine bestimmte Minute angeben. Beispielsweise würde "00-10" bedeuten, dass der Job zu jeder Minute zwischen 00 und 10 ausgeführt wird, während "30" bedeuten würde, dass der Job genau um 30 Minuten nach der Stunde ausgeführt wird.

Stunde (0-23)

Das Stundenfeld gibt die Stunde des Tages an, zu der der Job ausgeführt werden soll. Ähnlich wie beim Minutenfeld kannst du einen Bereich von Stunden oder eine bestimmte Stunde angeben. Beispielsweise würde "0-6" bedeuten, dass der Job zwischen Mitternacht und 6 Uhr morgens ausgeführt wird, während "14" bedeuten würde, dass der Job um 14 Uhr ausgeführt wird.

Tag (1-31)

Das Tagesfeld legt den Tag des Monats fest, an dem der Job ausgeführt werden soll. Du kannst einen bestimmten Tag, einen Bereich von Tagen oder einen bestimmten Wochentag angeben. Beispielsweise würde "15" bedeuten, dass der Job jeden 15. eines Monats ausgeführt wird, während "1-10" bedeuten würde, dass der Job zwischen dem 1. und 10. eines Monats ausgeführt wird.

Monat (1-12)

Das Monatsfeld gibt den Monat des Jahres an, in dem der Job ausgeführt werden soll. Du kannst einen bestimmten Monat, einen Bereich von Monaten oder einen bestimmten Monatstag angeben. Beispielsweise würde "6" bedeuten, dass der Job jeden Juni ausgeführt wird, während "3-6" bedeuten würde, dass der Job zwischen März und Juni ausgeführt wird.

Wochentag (0-6)

Das Wochentagfeld legt den Wochentag fest, an dem der Job ausgeführt werden soll. Die Verwendung von Zahlen und Namen ist möglich. Beispielsweise würde "0" Sonntag angeben, während "6" Samstag angeben würde. Alternativ kannst du auch Namen verwenden, wie "Sun" für Sonntag oder "Tue" für Dienstag.

Crontab-Datei einrichten und bearbeiten

Um Crontab effektiv nutzen zu können, musst du eine Crontab-Datei erstellen und bearbeiten. Dabei handelt es sich um eine Textdatei, die die geplanten Jobs und deren Ausführungszeiten enthält.

Erstellen der Crontab-Datei

Um eine Crontab-Datei zu erstellen, öffne dein Terminal und führe den folgenden Befehl aus:

crontab -e

Dieser Befehl öffnet den Standard-Texteditor zur Bearbeitung der Crontab-Datei.

Bearbeiten der Crontab-Datei

Die Crontab-Datei ist eine einfache Textdatei mit fünf Feldern, die durch Leerzeichen getrennt sind:

  1. Minute (0-59): Zu welcher Minute der Job ausgeführt werden soll.
  2. Stunde (0-23): Zu welcher Stunde der Job ausgeführt werden soll.
  3. Tag des Monats (1-31): An welchem Tag des Monats der Job ausgeführt werden soll.
  4. Monat (1-12): In welchem Monat der Job ausgeführt werden soll.
  5. Wochentag (0-7): An welchem Wochentag der Job ausgeführt werden soll.

Die erste Zeile in deiner Crontab-Datei ist ein Kommentar und kann von dir verwendet werden, um den Zweck der Datei zu beschreiben. Die folgenden Zeilen enthalten die eigentlichen Cron-Jobs.

Beispiel:

### Crontab-Datei für den Benutzer username

# Täglicher Job um 02:00 Uhr
0 2 * * * /home/username/my_script.sh

In diesem Beispiel wird der Befehl /home/username/my_script.sh jeden Tag um 02:00 Uhr ausgeführt.

Sonderzeichen

Du kannst auch Sonderzeichen verwenden, um komplexere Cron-Ausdrücke zu erstellen. Die wichtigsten Sonderzeichen sind:

  • * (Sternchen): Alle möglichen Werte.
  • , (Komma): Trennzeichen für mehrere Werte.
  • – (Bindestrich): Bereich von Werten.
  • / (Schrägstrich): Schrittweite für Werte.

Beispiel:

# Führt den Job jede Stunde zwischen 08:00 und 17:00 Uhr aus
0 8-17 * * * /home/username/my_script.sh

Umgebungsvariablen und Befehle

In der Crontab-Datei kannst du auch Umgebungsvariablen und Befehle verwenden.

Umgebungsvariablen:

Um auf Umgebungsvariablen zuzugreifen, verwende das folgende Format:

$VARNAME

Beispiel:

# Greift auf die Umgebungsvariable $HOME zu
0 2 * * * echo $HOME

Befehle:

Um Befehle in der Crontab-Datei auszuführen, verwende das folgende Format:

command arg1 arg2 ...

Beispiel:

# Führt den Befehl "ls -l" aus
0 2 * * * ls -l

Speichern und Beenden

Nachdem du die Crontab-Datei bearbeitet hast, speichere sie mit STRG+O (Windows: STRG+S) und beende den Editor mit STRG+X (Windows: STRG+Q). Deine Cron-Jobs sind nun aktiv und werden gemäß den angegebenen Zeitplänen ausgeführt.

Umgebungsvariablen und Kommandos ausführen

Cron-Jobs können auf Umgebungsvariablen zugreifen und Kommandos in der geplanten Umgebung ausführen. Diese Funktion ermöglicht es dir, komplexe Aufgaben zu automatisieren und die Ausführungsumgebung deiner Jobs anzupassen.

Umgebungsvariablen

Cron-Jobs können auf Umgebungsvariablen zugreifen, indem du sie umgibst $(…) . Beispielsweise gibt der folgende Befehl den Wert der Umgebungsvariablen USER aus:

echo $(USER)

Kommandos ausführen

Cron-Jobs können Kommandos in der geplanten Umgebung ausführen. Hierfür verwendest du einen normalen Shell-Befehl:

ls -l /home/user

Du kannst auch mehrere Befehle in einem einzigen Cron-Job ausführen, indem du sie mit Semikolons ; trennst:

ls -l /home/user; rm -rf /tmp/*

Ausführungsumgebung anpassen

Du kannst die Ausführungsumgebung deiner Cron-Jobs anpassen, indem du den PATH, HOME und andere Umgebungsvariablen festlegst. Beispielsweise kannst du den Pfad zu einem benutzerdefinierten Skript hinzufügen:

PATH=/usr/local/bin:$PATH

oder die HOME-Variable für den Benutzer festlegen, der den Job ausführt:

HOME=/home/other-user

Sonderzeichen und escape-Sequenzen

Beim Ausführen von Kommandos in Cron-Jobs musst du möglicherweise Sonderzeichen und Escape-Sequenzen verwenden, um die korrekte Befehlssyntax zu gewährleisten. Beispielsweise musst du Leerzeichen in Shell-Befehlen mit einem Backslash \ escapen:

echo "Hello World"

Du kannst auch Sonderzeichen wie Anführungszeichen " und Apostrophe ' escapen, indem du sie verdoppelst:

echo ""Hello World""

Sonderzeichen und Escape-Sequenzen

Crontab verwendet eine Vielzahl von Sonderzeichen und Escape-Sequenzen, um die Syntax zu erweitern und komplexe Zeitpläne zu ermöglichen.

Escape-Sequenzen

Escape-Sequenzen werden verwendet, um Sonderzeichen wie das Prozentzeichen (%) darzustellen, das eine neue Zeile anzeigt. Im Crontab können Escape-Sequenzen wie folgt verwendet werden:

  • \%: Prozentzeichen (%)
  • \n: Neue Zeile
  • \t: Tabulator
  • \*: Sternchen (*)
  • \,: Komma (,)

Spezialzeichen

Neben Escape-Sequenzen verwendet Crontab auch folgende Spezialzeichen:

  • *: Steht für "jeden". Dies kann in jedem Feld verwendet werden, um einen Wert anzugeben, der für alle möglichen Werte gilt.
  • -: Stellt einen Bereich dar. Dies kann verwendet werden, um einen Bereich von Werten anzugeben, z. B. 1-5.
  • ,: Trennt Werte in einem Feld. Dies kann verwendet werden, um mehrere Werte anzugeben, z. B. 1,3,5.
  • /: Schrittgröße. Dies kann verwendet werden, um einen Schritt zwischen den Werten in einem Bereich anzugeben, z. B. 1-5/2`.

Hinweise zur Verwendung von Sonderzeichen

  • Escape-Sequenzen und Spezialzeichen müssen in Anführungszeichen gesetzt werden, wenn sie in einem Befehl verwendet werden.
  • Wenn du ein Sonderzeichen ohne Escape-Sequenz verwendest, kann dies zu unerwarteten Ergebnissen führen.
  • Verwende Sonderzeichen mit Bedacht, um Verwirrung zu vermeiden.

Fehlerbehebung bei crontab

Cron-Jobs können manchmal nicht wie erwartet ausgeführt werden. Wenn du Probleme mit der Ausführung deiner Cron-Jobs hast, befolge diese Schritte zur Fehlerbehebung:

Überprüfe die Crontab-Syntax

Stelle sicher, dass deine Crontab-Syntax korrekt ist. Jede Abweichung von der angegebenen Syntax kann zu Ausführungsfehlern führen. Verwende Online-Tools oder Crontab-Validatoren, um deine Cron-Ausdrücke zu überprüfen.

Überprüfe die Berechtigungen

Stelle sicher, dass du die erforderlichen Berechtigungen zum Erstellen und Bearbeiten der Crontab-Datei hast. Normalerweise sollte nur der Root-Benutzer oder ein Benutzer mit entsprechenden Berechtigungen Cron-Jobs erstellen können.

Überprüfe den Pfad zum Skript oder Befehl

Wenn du ein Skript oder einen Befehl in deinem Cron-Job ausführst, stelle sicher, dass der Pfad zum ausführbaren Programm korrekt ist. Wenn der Pfad falsch ist, kann das Betriebssystem das Programm nicht finden und den Job nicht ausführen.

Überprüfe die Ausgabe des Jobs

Cron-Jobs schreiben ihre Ausgabe standardmäßig in die Syslog-Datei /var/log/syslog. Du kannst diese Datei überprüfen, um festzustellen, ob es Fehlermeldungen oder Hinweise auf Probleme mit deinem Cron-Job gibt.

Verwende Debugging-Tools

Es gibt verschiedene Debugging-Tools, die du verwenden kannst, um Probleme mit Cron-Jobs zu diagnostizieren. Beispielsweise kannst du den Befehl crontab -l verwenden, um deine Crontab-Einträge aufzulisten, oder den Befehl crontab -e verwenden, um deine Crontab-Datei im Editor zu öffnen.

Konsultiere die Dokumentation

Die Dokumentation deines Betriebssystems oder die Manpages für crontab enthalten hilfreiche Informationen zur Fehlerbehebung. Sie können detaillierte Anweisungen zur Syntax, Berechtigungen und anderen Aspekten von Cron-Jobs liefern.

Suche nach Hilfe online

Es gibt zahlreiche Online-Ressourcen, Foren und Communities, in denen du Hilfe bei der Fehlerbehebung bei Cron-Jobs suchen kannst. Suche nach relevanten Themen in Suchmaschinen oder besuche Entwicklerforen, in denen du Fragen stellen und Antworten von erfahrenen Benutzern erhalten kannst.

Crontab-Jobs aktivieren, deaktivieren und löschen

Crontab-Jobs können durch Bearbeiten der Crontab-Datei aktiviert, deaktiviert oder gelöscht werden. Hier sind die Schritte:

Jobs aktivieren

  • Aktiviere den Crontab-Dienst: Stelle sicher, dass der Crontab-Dienst ausgeführt wird, indem du den Befehl crontab -e ausführst.
  • Füge Cron-Jobs hinzu: Füge die Cron-Jobs, die du aktivieren möchtest, zur Crontab-Datei hinzu.

Jobs deaktivieren

Um Cron-Jobs zu deaktivieren, musst du einen Kommentar vor die Zeile des Jobs setzen. Hier ist ein Beispiel:

# job_to_disable * * * * * command_to_run

Jobs löschen

Zum Löschen von Cron-Jobs musst du die entsprechenden Zeilen aus der Crontab-Datei entfernen. Hier ist ein Beispiel:

vi crontab

Löschen einer einzelnen Zeile:

:1d

Löschen mehrerer Zeilen:

:1,3d

Speichern und Beenden:

:wq

Best Practices für die Crontab-Syntax

Um die Effizienz und Zuverlässigkeit deiner Cron-Jobs zu gewährleisten, empfehlen wir folgende Best Practices:

Klare und prägnante Befehle

  • Verwende leicht verständliche Befehle, die den Zweck des Jobs genau beschreiben.
  • Vermeide komplexe oder verschachtelte Befehle, die zu Fehlern führen können.

Zeitsteuerung optimieren

  • Plane Jobs für die Ausführung außerhalb der Spitzenzeiten, um Systemressourcen zu schonen.
  • Nutze */n-Intervalle anstelle von * für eine präzisere Zeitsteuerung.
  • Vermeide Überlappungen zwischen Jobs, da dies zu Konflikten führen kann.

Fehlerbehandlung einbauen

  • Überwache Cron-Jobs regelmäßig mit Tools wie cronolog oder logwatch.
  • Leite Fehlermeldungen an eine E-Mail-Adresse oder ein Überwachungssystem weiter.
  • Verwende set -e in Skripten, um Jobs bei Fehlern zu beenden.

Umgebungsvariablen nutzen

  • Verwende Umgebungsvariablen, um Konfigurationsparameter an Cron-Jobs zu übergeben.
  • Dadurch werden Befehle flexibler und einfacher zu verwalten.

Sicherheit beachten

  • Führe Cron-Jobs immer mit minimalen Berechtigungen aus.
  • Beschränke den Zugriff auf die Crontab-Datei auf autorisierte Benutzer.
  • Verwende sudo vorsichtig und nur wenn nötig.

Dokumentation und Kommentare

  • Dokumentiere deine Crontab-Datei ausführlich mit Kommentaren.
  • Erkläre den Zweck jedes Jobs, seine Zeitsteuerung und die verwendeten Befehle.
  • Dies erleichtert das Verständnis und die Wartung durch andere Benutzer.

Regelmäßige Überprüfung

  • Überprüfe deine Crontab-Datei regelmäßig auf veraltete oder doppelte Jobs.
  • Deaktiviere oder lösche nicht verwendete Jobs, um die Datei übersichtlich zu halten.

Erweiterte Crontab-Optionen

Crontab bietet zusätzlich zu den grundlegenden Syntaxregeln erweiterte Optionen, mit denen du die Planung deiner Cron-Jobs noch präziser und flexibler gestalten kannst.

Crontab-Dateienstellungen

Du kannst die Einstellungen deiner Crontab-Datei über Kommandozeilenparameter konfigurieren:

  • crontab -l: Zeigt die aktuelle Crontab-Datei an.
  • crontab -e: Öffnet die Crontab-Datei zur Bearbeitung in einem Texteditor.
  • crontab -r: Löscht die aktuelle Crontab-Datei.

Umgebungsvariablen und Befehlsoptionen

Du kannst Umgebungsvariablen und Befehlsoptionen verwenden, um das Verhalten deiner Cron-Jobs anzupassen:

  • Umgebungsvariablen: Setze Umgebungsvariablen im Crontab-Eintrag, um sie für den ausgeführten Befehl verfügbar zu machen. Beispielsweise kannst du [email protected] verwenden, um E-Mail-Benachrichtigungen zu aktivieren.
  • Befehlsoptionen: Füge Befehlsoptionen nach dem Befehl hinzu, um dessen Verhalten zu ändern. Beispielsweise kann ls -lh verwendet werden, um eine detaillierte Ausgabe mit menschlich lesbaren Größen zu erhalten.

Restriktionen und Berechtigungen

Du kannst Restriktionen und Berechtigungen für Cron-Jobs festlegen:

  • Benutzerdefinierte Berechtigungen: Verwende die Option -u benutzername bei crontab -e, um eine Crontab-Datei für einen bestimmten Benutzer zu bearbeiten.
  • Sudo: Verwende sudo vor dem crontab-Befehl, um die Crontab-Einstellungen eines anderen Benutzers als Root zu bearbeiten.
  • Berechtigungsbeschränkungen: Cron-Jobs können mit bestimmten Berechtigungen ausgeführt werden, um die Sicherheit zu erhöhen. Dies kann mithilfe der --limit-Option in crontab -e konfiguriert werden.

Crontab-Dienste

Es gibt Dienste wie Cronitor und Healthchecks.io, die erweiterte Crontab-Funktionen wie Überwachung, Benachrichtigungen und automatische Fehlerbehebung bieten.

Beispiele für Crontab-Ausdrücke

Crontab-Ausdrücke bieten eine flexible Syntax, um Jobs zu planen und auszuführen. Im Folgenden findest du einige gängige Beispiele für Crontab-Ausdrücke mit Erklärungen:

Tägliche Jobs planen

Um einen Cron-Job einzurichten, der täglich um 10 Uhr morgens läuft, verwendest du den folgenden Ausdruck:

0 10 * * *
  • Minute: 0
  • Stunde: 10
  • Tag: * (jeder Tag)
  • Monat: * (jeder Monat)
  • Wochentag: * (jeder Wochentag)

Wöchentliche Jobs planen

Um einen Cron-Job einzurichten, der jeden Montag um 15 Uhr läuft, verwendest du den folgenden Ausdruck:

0 15 * * 1
  • Minute: 0
  • Stunde: 15
  • Tag: * (jeder Tag)
  • Monat: * (jeder Monat)
  • Wochentag: 1 (Montag)

Monatliche Jobs planen

Um einen Cron-Job einzurichten, der am 15. jedes Monats um 23:30 Uhr läuft, verwendest du den folgenden Ausdruck:

30 23 15 * *
  • Minute: 30
  • Stunde: 23
  • Tag: 15
  • Monat: * (jeder Monat)
  • Wochentag: * (jeder Wochentag)

Jobs planen, die an bestimmten Wochentagen laufen

Um einen Cron-Job einzurichten, der an jedem Montag, Mittwoch und Freitag um 14 Uhr läuft, verwendest du den folgenden Ausdruck:

0 14 * * 1,3,5
  • Minute: 0
  • Stunde: 14
  • Tag: * (jeder Tag)
  • Monat: * (jeder Monat)
  • Wochentag: 1,3,5 (Montag, Mittwoch, Freitag)

Komplexe Crontab-Ausdrücke

Du kannst auch komplexere Crontab-Ausdrücke erstellen, um eine genauere Kontrolle über die Ausführungszeitpunkte zu erhalten. Beispielsweise kannst du den folgenden Ausdruck verwenden, um einen Cron-Job einzurichten, der an jedem letzten Montag des Monats um 23:59 Uhr läuft:

59 23 * * 5L
  • Minute: 59
  • Stunde: 23
  • Tag: * (jeder Tag)
  • Monat: * (jeder Monat)
  • Wochentag: 5L (letzter Montag des Monats)

Schreibe einen Kommentar