UNIX / Linux Cronjobs

Cronjobs bzw. der Cron-Daemon ermöglichen Ihnen die zeitliche Planung und automatisierte Ausführung beliebiger Befehle und Programme. Neben der systemweit verfügbaren Datei /etc/crontab, gibt es dazu auch die Möglichkeit für jeden Benutzer eine eigene Crontab zu erstellen.

In diesem Beitrag lernen Sie die Funktionsweise und Konfiguration von benutzerspezifischen und systemweiten Crontabs bzw. Cronjobs kennen.

Paketinstallation

Der Cron-Daemon und die benötigten Werkzeuge für die Konfiguration von Cronjobs bzw. Crontabs sind im Paket cron enthalten. Dieses ist bei Debian standardmäßig schon installiert. Sollte dies bei Ihrem System jedoch nicht der Fall sein, so können Sie das Paket mit dem folgenden Befehl nachinstallieren:

apt-get install cron

Näheres zur Paket- und Quellenverwaltung mit apt-get finden Sie in unserem dazugehörigen Beitrag.

Crontab für einen Benutzer erstellen

Jeder Benutzer des Systems kann seine eigene Crontab-Tabelle erstellen und konfigurieren. Mit dem Befehl crontab und der Option -e (edit) lässt sich eine neue Tabelle anlegen:

crontab -e

Der Befehl erstellt nur dann eine neue Tabelle, wenn diese nicht bereits vorhanden ist. Die Tabelle wird unter dem Namen des jeweiligen Benutzers im Verzeichnis /var/spool/cron/crontabs/ gespeichert. Bei der ersten Ausführung wird zudem eine Abfrage durchgeführt, bei der Sie einen Editor für die Bearbeitung der Crontab-Tabelle auswählen müssen. Die Auswahl wird in den Umgebungsvariablen EDITOR bzw. VISUAL gespeichert - Der gewählte Editor öffnet sich in Zukunft dann automatisch.

crontab-select-editor

Für diesen Beitrag verwenden wir den nano-Texteditor. Wenn Sie zu einem späteren Zeitpunkt einen anderen Editor auswählen möchten, dann können Sie die Auswahl mit dem Befehl select-editor erneut durchführen:

select-editor

Die neue Crontab-Tabelle enthält bis auf einige Kommentare noch keine Einträge:

crontab-empty-table

Aufbau der Crontab-Tabelle

Cronjobs werden in der Crontab-Tabelle untereinander aufgelistet, sodass jeder Cronjob in einer eigenen Zeile steht. Die Zeilen sind dann jeweils in 6 Spalten unterteilt, welche die zeitliche Konfiguration und den Befehl beinhalten:

Für die Zeit werden dabei eine Minuten- (minute) (1) und Stundenangabe (hour) (2), sowie Angaben zum Tag im Monat (day of month) (3), zum Monat selbst (month) (4) und zum Wochentag (day of week) (5) unterstützt. An letzter Stelle steht schließlich der auszuführende Befehl (command) (6).

crontab-table-beschriftet

Wichtig ist, dass am Ende der Crontab-Tabelle immer eine Leerzeile steht.

Crontab Syntax

Die zeitlichen Angaben sind im folgende Format anzugeben:

Spalte

Format

m (minute)

0-59

h (hour)

0-23

dom (day of month)

0-31

mon (month)

1-12

dow (day of week)

0-7 (Sonntag ist dabei die 0 oder 7)

Bei den Zeitwerten ist außerdem auch die Verwendung bestimmter Sonderzeichen bzw. Operatoren erlaubt:

Operator

Funktion

*

Ausführung findet bei beliebigem Wert statt

*/n

Ausführung findet alle n Zeiteinheiten statt

n,m,x

Ausführung findet zu den Zeitpunkten n, m und x statt (Aufzählung) 

n-m

Ausführung im Zeitraum n-m (1-4 entspricht dabei 1,2,3,4)

?

Das Fragezeichen kann in den Feldern dom und dow verwendet werden. Wird ein Wert in einem der beiden Felder spezifiziert wird, kann das jeweils andere Feld mit dem Fragezeichen "frei" gelassen werden.

L

Spezifiziert im Feld dom den letzten Tag eines angegebenen oder beliebigen Monats. (z.B. 2L für den letzten Tag im Februar) Im Feld dow spezifiziert ein L den letzten Tag der Woche - Wird es an einen Wochentag angehängt, so wird der letzte jeweilige Wochentag des Monats spezifiziert. Der Operator darf nicht mit Aufzählungen kombiniert werden.

W

Spezifiziert im Feld dom den Werktag (Montag bis Freitag), welcher dem gewählten Tag im Monat jeweils am nächsten liegt. Die Kombination von L und W spezifiziert im Feld dom den letzten Werktag des Monats.

x#n

Spezifiziert im Feld dow den n-ten Wochentag des Monats, wobei x einen beliebigen Wochentag darstellt. (z.B. 7#1 für den ersten Sonntag im Monat)

Im sechsten Feld - bei dem auszuführenden Befehl - ist zu beachten, dass jegliche Prozentzeichen % automatisch in Newline-Zeichen umgewandelt werden, sodass der Befehl nur bis zu dem ersten Vorkommnis eines Prozentzeichens ausgeführt wird. Werden in einem Befehl Prozentzeichen benötigt, so müssen diese daher mit dem Backslash \ maskiert werden.

Cronjob Ausgaben

Erzeugt ein durch den Crontab-Daemon aufgerufener Befehl eine Ausgabe, so wird diese nicht in den Standard-Output (stdout) ausgegeben, sondern standardmäßig per E-Mail an den Benutzer gesendet, unter dessen Benutzerkonto der Befehl ausgeführt wurde. Dieses Verhalten lässt sich mithilfe von Umleitungen bzw. Redirections jedoch auch verändern.

So ist es beispielsweise möglich, den Standard-Output (stdout) stattdessen in eine Datei umzuleiten. Eine andere Möglichkeit besteht darin, die Ausgabe nach /dev/null zu leiten und sie so vollständig zu verwerfen. Ähnlich kann auch mit dem Standard-Error-Output (stderr) vorgegangen werden.

Näheres zur Anwendung von Eingabe- / Ausgabe-Umleitungen bzw. I/O-Redirections mit Befehlen finden Sie in unserem dazugehörigen Beitrag.

Beispiel: date Crontab

Der folgende Cronjob führt jede Minute (*/1) den Befehl date aus und leitet die Ausgabe in die Datei zeit.txt im Verzeichnis /home/hellberg/ um.

Eintrag in der Crontab-Tabelle:

*/1 * * * * date >> /home/hellberg/zeit.txt

Inhalt der zeit.txt (nach 5 Minuten):
cronjob-zeit-ausgabe
Beispiel: ping Crontab

Mithilfe dieses Cronjobs kann regelmäßig die Erreichbarkeit eines Rechners / Servers überprüft werden. Der Befehl ping wird dazu alle 2 Minuten (*/2) ausgeführt. Der Standard-Output (stdout) des Befehls wird nach /dev/null umgeleitet und damit verworfen. Da der Standard-Error-Output (stderr) jedoch noch immer standardmäßig per E-Mail an den ausführenden Benutzer gesendet wird, erhält der Benutzer nur dann eine Benachrichtung, wenn etwas nicht ordnungsgemäß funktioniert.

Eintrag in der Crontab-Tabelle:

*/2 * * * * ping profi-tutorials.de > /dev/null

Crontab des root-Benutzers

Genauso wie alle anderen Benutzer kann auch root seine eigene Crontab-Tabelle anlegen und konfigurieren. Die in dieser Tabelle enthaltenen Befehle werden dann mit root-Rechten ausgeführt.

Beispiel: tar Crontab

Dieser Cronjob zeigt beispielhaft die Implementierung eines wöchentlichen Backup der Home-Verzeichnisse. Die Home-Verzeichnisse werden dazu jeweils einmal Montag und Freitag (1,5) um 22:00 Uhr mit dem Befehl tar archiviert und unter /data/backups/ abgelegt.

Dieser Cronjob muss unter dem root-Benutzer angelegt werden, da er root-Rechte erfordert.

Eintrag in der Crontab-Tabelle:

* 22 * * 1,5 tar -zcf /data/backups/home.tgz /home/

Crontab - Weitere Optionen

-u - Benutzer spezifizieren

Mit der Option -u (user) haben Sie die Möglichkeit, die Crontab-Tabelle eines anderen Benutzers für die Bearbeitung oder das Auflisten zu spezifizieren. Die Option wird daher nur in Verbindung mit anderen Optionen eingesetzt. Voraussetzung für die Verwendung von -u ist jedoch, dass der aktive Benutzer die nötigen root-Rechte besitzt.

crontab [Optionen] -u [Benutzer]

-l - Crontab auflisten

Mit der Option -l (list) lassen sich alle Einträge einer Crontab auflisten.

crontab [Optionen] -l

-r - Crontab löschen

Wenn Sie eine Crontab wieder löschen wollen, dann können Sie dazu die Option -r (remove) verwenden. Dabei ist zu beachten, dass die Crontab hierbei ohne jegliche Rückfrage gelöscht wird.

crontab [Optionen] -r

-i - Crontab löschen (Abfrage)

Die Option -i verhält sich ähnlich wie -r. Auch hiermit können Sie eine Crontab löschen. Vor der Durchführung des Löschvorgangs erfolgt jedoch eine zusätzliche Rückfrage über das Terminal, welche zunächst bestätigt werden muss.

crontab [Optionen] -i

Systemweite Crontab

Cronjobs die mit den Rechten bestimmter Benutzer ausgeführt werden sollen können in die systemweite Crontab-Tabelle eingetragen werden, welche sich unter /etc/crontab befindet. Die systemweite Crontab-Tabelle besitzt im Vergleich zur bereits vorgestellten normalen Tabelle eine weitere Spalte, in welche der Benutzer eingetragen wird, unter dem der Befehl ausgeführt werden soll. Die Spalte befindet sich direkt vor der Spalte 'Command':

crontab-systemwide-table

Die systemweite Crontab eignet sich besonders, wenn Befehle/Programme/Skripte unter einem servereigenen Benutzer ausgeführt werden soll. Ein Beispiel ist hierbei der www-data Benutzer des Apache-Webserver.

Eine andere Anwendungsmöglichkeit ist die Erstellung von Cronjobs für einen Benutzer,  die von diesem jedoch nicht eingesehen, entfernt oder verändert werden können.

Lade Dir JETZT die Linux Befehle PDF herunter!


Erhalte einen Überblick zu den wichtigsten Linux und UNIX Befehlen!

Joel Benseler

Click Here to Leave a Comment Below

Leave a Comment: