Tipp: Du kannst für alle Dateinamen und Verzeichnisse die automatische Vervollständigung mithilfe der Tab-Taste nutzen, sodass du nicht die kompletten Datei- oder Verzeichnisnamen manuell eintippen musst.

Diese Anleitung wurde am 16.03.2019 zuletzt überprüft und aktualisiert.

Bist du auf der Suche nach sehr guten, leistungsstarken und günstigen Servern?
Ich miete meine Server seit 5 Jahren bei Contabo und kann Contabo wirklich sehr empfehlen!
Was sind Cronjobs?

Der Dienst "Cron" ist unter Linux - beispielsweise unter Debian oder Ubuntu - bereits als gleichnamiges Paket vorinstalliert. Mithilfe von Cronjobs kannst du bestimmte Aufgaben automatisiert zu von dir definierten (wiederkehrenden) Zeitpunkten ausführen lassen. Cronjobs sind daher beispielsweise für automatische Backups sinnvoll.

Crontab

Die einzelnen Cronjobs werden in einer Tabelle, der sogenannten "Crontab", gespeichert. Der Befehl, mit dem du die Crontab des derzeit angemeldeten Benutzers bearbeiten kannst, lautet crontab -e. In dieser Tabelle wird jeweils ein Cronjob pro Zeile definiert. Jede Zeile enthält dabei den Zeitpunkt, wann der Befehl ausgeführt werden soll sowie den auszuführenden Befehl selbst. Die Syntax einer Crontab-Zeile sieht wie folgt aus:

0 10 * * * Befehl

Als erstes wird die Minute definiert. Darauf folgen die Stunde, der Tag, der Monat sowie der Wochentag. Am Ende steht der Befehl, welcher ausgeführt werden soll. Für alle Zeitangaben kann auch ein "*" verwendet werden, um zu kennzeichnen, dass die Ausführung zu jeder Minute, Stunde etc. stattfinden soll. Im obigen Beispiel wird der Befehl jeden Tag um 10:00 Uhr ausgeführt. Es können pro Zeitangabe (Stunde, Minute, Tag etc.) auch mehrere Werte hinterlegt werden, indem sie durch ein Komma getrennt werden.

Möchtest du einen Befehl also beispielsweise am 1. und 15. Tag der Monate Januar, März und August um 10:00 Uhr und 20:00 Uhr ausführen (egal, an welchem Wochentag), dann sieht die Zeile in der Crontab wie folgt aus:

0 10,20 1,15 1,3,8 * Befehl

Es ist neben der Verwendung fester Zeitangaben auch möglich, ein Intervall festzulegen. Um anstelle der Minute 10 nun das Intervall "alle 10 Minuten" anzugeben, wird ein "*/" vor den jeweiligen Wert gesetzt. An der Stelle der Minutenangabe kannst du also "*/10" eintragen, um einen Befehl in einem 10-minütigen Intervall auszuführen. Die Zeile in der Crontab kann dabei z.B. so aussehen:

*/10 * * * * Befehl

Wenn du eine bestimmte Aufgabe nach jedem Neustart bzw. generell nach jedem Hochfahren deines Servers ausführen lassen möchtest, dann kannst du anstelle der 5 Zeitangaben einfach "@reboot" verwenden. Soll also nach jedem Neustart des Servers ein Script ausgeführt werden, dann könnte die Crontab-Zeile folgendermaßen lauten:

@reboot /usr/bin/test-script.sh
Ausgabe der Cronjobs

Standardmäßig werden sämtliche Ausgaben, welche von Befehlen oder Scripts geliefert werden, bei der Ausführung via Cronjobs per E-Mail an den jeweiligen Benutzer auf dem Server, welcher den Cronjob in seiner Crontab gespeichert hat, gesendet. Es ist jedoch möglich, diese Ausgabe in eine (Log-)Datei umzuleiten oder sie, falls gewünscht, komplett zu unterdrücken.

Um die Ausgabe eines Befehls oder Scripts in eine (Log-)Datei umzuleiten, musst du hinter den Befehl oder das Script in deiner Crontab-Zeile ">>" gefolgt vom Pfad der Datei, in die diese Ausgabe umgeleitet werden soll, schreiben. Das doppelte Größer-als-Zeichen bedeutet, dass die Ausgabe an den bestehenden Inhalt der Datei angehängt wird und diesen nicht überschreibt.

Hinter dem Pfad der Datei muss außerdem noch "2>&1"" stehen, da dies dafür sorgt, dass nicht nur die normale Ausgabe, sondern auch Fehler in diese Datei umgeleitet werden. Soll die Umleitung eines täglichen Backups in die Datei "/var/log/backup.log" erfolgen, dann könnte die Crontab-Zeile folgendermaßen aussehen:

0 5 * * * /usr/bin/create-backup.sh >> /var/log/backup.log 2>&1
Cronjob-Dateien

Wie bereits oben erwähnt, ist die Bearbeitung der Crontab eines Benutzers mithilfe des Befehls crontab -e möglich. Es gibt jedoch, neben der System-Crontab-Datei unter "/etc/crontab", auch die Möglichkeit, Cronjobs in Dateien innerhalb des Verzeichnisses "/etc/cron.d/" abzulegen, um diese zu trennen. Die Syntax ist dabei dieselbe wie in der Crontab des Benutzers. Wenn du PHP auf deinem Server installiert hast, wirst du feststellen, dass es dort bereits eine Datei namens "php" gibt, welche das automatisierte Bereinigen von PHP-Session-Dateien übernimmt.

Zusätzlich zu diesen Dateien gibt es auch vordefinierte Ordner für bestimmte Zeitintervalle. Es existieren die folgenden Ordner:

  • /etc/cron.daily/
  • /etc/cron.hourly/
  • /etc/cron.monthly/
  • /etc/cron.weekly/

Innerhalb dieser Verzeichnisse kannst du ebenfalls Dateien anlegen. In diesen Dateien wird dann jedoch nicht die Crontab-Syntax verwendet, da es sich hierbei nicht um eine Tabelle handelt. Das Zeitintervall der Ausführung ist bereits durch den Namen des Verzeichnisses vorgegeben. In diese Dateien werden lediglich Scripts geschrieben, die in den bestimmten Zeitintervallen ausgeführt werden sollen - im Falle von "/etc/cron.hourly/" also stündlich.