Hilfe

« Zurück

Cron

Der Cron-Deamon ist ein Dienst, mit dem Sie Skripte und Programme zeitbasiert ausführen können. Die auszuführenden Befehle werden in einer Tabelle gespeichert. Diese Tabelle wird Crontab genannt. In diesem Artikel erfahren Sie, wie Sie mittels SSH auf die Tabelle Crontab zugreifen und sowohl Skripte als auch Programme zeitbasiert ausführen können.

Um Cron zu nutzen, müssen Sie eine SSH-Verbindung zu Ihrem Projekt herstellen. Geben Sie anschließend den Befehl crontab -e ein, um die Crontab-Datei zu öffnen.

Hinweis: Die Crontab-Datei befindet sich im Verzeichnis /var/spool/cron.

Crontab-Datei mit vi editieren

Beim Aufruf von crontab -e wird standardmäßig der Editor vi aufgerufen.

Hinweis: Um die Crontab-Datei mit dem Editor Nano zu bearbeiten, geben Sie alternativ den Befehl EDITOR=nano crontab -e ein.

Der Editor vi verfügt über einen Einfügemodus und einen Befehls- oder Kommandomodus. Den Einfügemodus können Sie mit der Taste i aufrufen. In diesem Modus werden die eingegebenen Zeichen sofort in den Text eingefügt. Um den Befehlsmodus aufzurufen, drücken Sie anschließend die ESC-Taste. Wenn Sie den Befehlsmodus nutzen, werden Ihre Tastatureingaben als Befehl interpretiert.

Hinweis: vi kann nicht im Einfügemodus beendet werden. Rufen Sie daher stets den Befehlsmodus auf, um vi zu beenden.

Im Folgenden sind die wichtigsten Befehle aufgeführt:

Befehl Beschreibung
dd Aktuelle Zeile löschen
u Letzte Änderung rückgängig machen
J Zeilen zusammenfassen
o Neue Zeile unter der aktuellen einfügen
P Kopierte Daten an der Cursor-Position einfügen
:q! Editor schließen, ohne die Änderungen zu speichern.
:wq Text speichern und Editor schließen

Aufbau der Crontab-Datei und Crontab-Syntax

Alle von Cron auszuführenden Befehle werden in einer Tabelle gespeichert. Diese Tabelle wird Crontab genannt und besteht aus den folgenden Spalten:

Minuten (0 - 59) Stunden (0 - 23, 0 = Mitternacht) Tage (1 - 31) Monat (1 - 12) Wochentag (0 - 6, 0 = Sonntag) Befehl oder Verzeichnispfad und Name des Scripts
* * * * * z. B. /var/www/directory/myscript.sh

Die ersten 5 Spalten dieser Tabelle enthalten Zeitangaben. Die Einträge in diesen Spalten dürfen keine Leerzeichen enthalten. Die 6. Spalte enthält den jeweiligen Befehl oder den Verzeichnispfad und den Namen des gewünschten Skripts. Die einzelnen Spalten werden durch Leerzeichen getrennt.

Achtung: Stellen Sie bei der Eingabe des Befehls sicher, dass stets der vollständige Pfad angegeben wird. Darüber hinaus muss nach der Eingabe des Befehls immer ein harter Zeilenumbruch eingefügt werden (z. B. mit '\n').

Im folgenden Beispiel soll das Verzeichnis /var/www/html/sites um 04:01 Uhr am 1. Januar und an jedem Montag im Monat Januar gesichert werden:

01 04 1 1 1 cp -a /var/www/html/sites /var/www/html/backups

Das Backup wird hierbei im Verzeichnis /var/www/html/backups gespeichert.

Um das Verzeichnis /var/www/html/sites täglich um 04.01 Uhr zu sichern, geben Sie den folgenden Befehl ein:

01 04 * * * cp -a /var/www/html/sites /var/www/html/backups

Wenn das Verzeichnis alle 10 Minuten gesichert werden soll, geben Sie den folgenden Befehl ein:

*/10 * * * cp -a /var/www/html/sites /var/www/html/backups

Um den Befehl um 08 Uhr, 9 Uhr und um 10 Uhr auszuführen, geben Sie den Befehl im folgenden Format ein:

* 8-10 * * cp -a /var/www/html/sites /var/www/html/backups
Hinweis: Alternativ können Sie diese Zeitangabe auch im folgenden Format eingeben: 8,9,10

Um das Verzeichnis /var/www/html/sites im Zeitraum Januar und Juni um 04:01 Uhr, 04:31 Uhr, 05:01 Uhr und um 05:31 Uhr täglich zwischen dem 1. und 15. des jeweiligen Monats zu sichern, geben Sie den folgenden Befehl ein:

01,31 04,05 1-15 1,6 * cp -a /var/www/html/sites /var/www/html/backups

Vordefinierte Strings zur Festlegung von Zeitangaben

Sie können alternativ vordefinierte Strings verwenden, um eine Zeitangabe für einen Cronjob festzulegen. Diese sind im Folgenden aufgeführt:

String Bedeutung Ersetzt den folgenden Eintrag im Crontab
@reboot einmalig, beim Systemstart
@yearly einmal im Jahr 0 0 1 1 *
@annually einmal im Jahr 0 0 1 1 *
@monthly einmal im Monat 0 0 1 * *
@weekly einmal pro Woche 0 0 * * 0
@daily einmal pro Tag 0 0 * * *
@midnight einmal pro Tag 0 0 * * *
@hourly einmal pro Stunde 0 * * * *

Skripte mit Cron ausführen

Um die Ausführung von mehreren Befehlen oder Programmen zu kombinieren, können Sie ein Skript erstellen. Anschließend können Sie das Skript mittels Cron zeitbasiert ausführen. Im Folgenden werden die Erstellung eines Skripts und eines Crontab-Eintrags beispielhaft beschrieben:

  1. Öffnen Sie den Editor.
  2. Fügen Sie das gewünschte Skript im folgenden Format ein:

    #!/bin/bash
    cp -a /var/www/html/sites /var/www/html/backups
    cp -a /var/www/html/index.php /var/www/html/backups
    
  3. Speichern Sie das Skript im Verzeichnis /var/www/html/cronscripts. Geben Sie der Datei einen treffenden Dateinamen.

  4. Damit das Skript ohne Angabe des Interpreters ausgeführt werden kann, geben Sie den folgenden Befehl ein:

    chmod +x /var/www/html/cronscripts/backup.sh
  5. Geben Sie den Befehl crontab -e ein.
  6. Fügen Sie einen Eintrag in die Crontab-Tabelle ein.

    01 04 * * * /var/www/html/cronscripts/backup.sh
  7. Um den Befehlsmodus aufzurufen, drücken Sie die ESC-Taste.
  8. Geben Sie den Befehl :wq ein, um Ihre Änderungen zu speichern.

Liste der angelegten Cronjobs anzeigen

Mit dem folgenden Befehl können Sie sich eine Liste der angelegten Cronjobs anzeigen lassen:

crontab -l

Log-Dateien

Alle Aktionen, die von Cron ausgeführt werden, werden in der Datei $CRON_LOG_FILE protokolliert. Diese Datei befindet sich in den meisten Fällen im Verzeichnis /var/spool/cron.

Benachrichtigungen

Mit der MAILTO-Variable können Sie sich per E-Mail informieren lassen, wenn ein Fehler bei der Verarbeitung eines Cronjobs auftritt. Diese Variable ist in der Crontab-Tabelle aufgeführt. Wenn Sie eine E-Mail-Adresse eingeben, wird der Empfänger über alle von Cron ausgeführten Aktionen benachrichtigt.