Tipp: Sie können für alle Dateinamen und Verzeichnisse die automatische Vervollständigung mithilfe der Tab-Taste nutzen, sodass Sie nicht die kompletten Datei- oder Verzeichnisnamen manuell eintippen müssen.

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

Sind Sie auf der Suche nach sehr guten, leistungsstarken und günstigen Servern?
Ich miete meine Server seit über 10 Jahren bei Contabo und kann Contabo sehr empfehlen!
Was sind Cronjobs?

Der Dienst "Cron" ist unter Linux - beispielsweise unter Debian oder Ubuntu - bereits als gleichnamiges Paket vorinstalliert. Mithilfe von Cronjobs können Sie bestimmte Aufgaben automatisiert zu von Ihnen 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 Sie die Crontab des derzeit angemeldeten Benutzers bearbeiten können, 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 (0-59) definiert. Darauf folgen die Stunde (0-23), der Tag (1-31), der Monat (1-12) sowie der Wochentag (1-7). 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 auch mehrere Werte hinterlegt werden, indem sie durch ein Komma getrennt werden.

Hinweis: Falls Sie Ihre Crontab-Einträge automatisch generieren lassen möchten, ohne sich dabei Gedanken über die genaue Syntax der Crontab machen zu müssen, können Sie gerne meinen kostenlosen Crontab Generator verwenden.

Möchten Sie 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 können Sie 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 Sie eine bestimmte Aufgabe nach jedem Neustart bzw. generell nach jedem Hochfahren Ihres Servers ausführen lassen möchten, dann können Sie 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, müssen Sie hinter den Befehl oder das Script in Ihrer 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.

Möchten Sie die Ausgabe hingegen unterdrücken, dann nutzen Sie "> /dev/null" anstelle des doppelten Größer-als-Zeichens und des Pfades der Ausgabe-Datei hinter dem Befehl oder Script. Es handelt sich dabei um das sogenannte "Null Device" unter Linux. Dieses sorgt dafür, dass alle Ausgaben direkt verworfen und nicht gespeichert werden.

Hinter dem Pfad der Datei oder des Null Devices ("/dev/null") 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

Der Crontab-Eintrag für den gleichen Cronjob, bei dem in diesem Fall jedoch keine Ausgabe gespeichert werden soll, würde somit wie folgt lauten:

0 5 * * * /usr/bin/create-backup.sh > /dev/null 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 Sie PHP auf Ihrem Server installiert haben, werden Sie 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 können Sie 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.