Cron auf Linux Systemen

Der sogenannte Cronjob ist auf den Cron-Daemon zurückzuführen, der Linux Nutzern bekannt sein könnte. Webmaster, die (in der Regel über SSH) Zugriff auf einen (v)Server haben, müssen nicht erst auf einen externen Anbieter zurückgreifen, sondern können dies mit einem Linux cron erledigen. Wir zeigen wie.

Hinweis für Windows-Nutzer: Diese können das Tool AT als Alternativ-Lösung einsetzen.

Cron in der Crontab einrichten

Unter Linux Systemen verfügt jeder Benutzer über eine eigene Tabelle, die Informationen zu den auszuführenden Cronjobs des Nutzers beinhaltet. Diese Tabelle bezeichnet man als Crontab.

Zum Editieren dieser Tabelle, reicht die Eingabe dieses Befehls:

crontab -e

Die Tabelle wird dir jetzt in deinem Standard-Editor angezeigt und kann dort bearbeitet werden. Du solltest jetzt bereits einige auskommentierte Zeilen sehen, die beschreiben, wie das System funktioniert. Außerdem befinden sich zu Beginn einige Anweisungen, die nicht gelöscht werden sollten.

Ich erkläre die Funktion einmal kurz hier: Jede Zeile kann - wenn sie nicht leer ist oder mit "#" auskommentiert wurde - dafür genutzt werden einen Cronjob einzurichten, der jedes Mal zu einer festgelegten Zeit ausgeführt wird. Ein Cronjob kann bis zu 60-mal in der Stunde, also einmal pro Minute ausgeführt werden.

Die ersten 5 Werte bestimmen die Zeit. Sie werden durch ein Leerzeichen oder einen Tabulator voneinander getrennt. Darauf folgt der Befehl beziehungsweise das Kommando welches ausgeführt werden soll:

[Minute, 0-59] [Stunde, 0-23] [Tag, 1-31] [Monat, 1-12] [Wochentag, 0-7] [Befehl]

Ein * kann für jeden Wert (außer bei dem [Befehl]) verwendet werden. Setzt du ein solches Sternchen beispielsweise bei [Minute], [Stunde], [Tag], [Monat] und [Wochentag] ein, würde der Cronjob jede Minute ausgeführt werden. Das Zeichen hat also die Funktion eines Jokers.

Sollte dich irritieren, dass der Wochentag neben dem * ganze acht mögliche Wert kennt, obgleich es nur sieben Wochentage gibt, so solltest du wissen, dass sowohl 0 als auch 7 für den Sonntag stehen.

Bei dem [Befehl] handelt es sich um einen einfachen Befehl, wie du in auch in die Kommandozeile eingeben kannst. Zur Veranschaulichung hier einige Beispiele:

#cron.php wird jeden Montag um 00:30 aufgerufen
30 0 * * 1 /usr/bin/php -f /var/www/cron.php
#cron.php wird alle 15 Minuten aufgerufen
*/15 * * * * /usr/bin/php -f /var/www/cron.php
#cron.php wird am 15. Tag des Monats jedes Mal zur vor vollen Stunden aufgerufen
0 * 15 * * /usr/bin/php -f /var/www/cron.php

Statt /usr/bin/php -f /var/www/cron.php könntest du hier auch einen anderen Befehl einsetzen und zum Beispiel alle Dateien aus dem Ordner "Log" der eigenen Homepage löschen: rm -rf /var/www/log/*

Beachte jedoch, dass der Cronjob mit dem Benutzer ausgeführt wird, der ihn benutzt. Hat der Nutzer nicht die entsprechenden Rechte, kann er auch gewisse Befehle nicht ausführen.

 

Neuer Cron als Bash Befehl (statt editieren)

Manchmal kann es notwendig sein, dass du nicht erst eine Datei editieren musst, um einen Cronjob anzulegen. Stattdessen kannst du den Cronjob mittels eines einfachen Tricks auch komplett über die Kommandozeile anlegen. Nutze dafür die folgenden Befehle (und passe die 2. Zeile an!):

crontab -l > cronedit
echo "0 * 15 * * /usr/bin/php -f /var/www/cron.php" >> cronedit
crontab cronedit
rm cronedit

Mit dieser Befehlskette lesen wir die Crontab-Datei des Benutzer aus und speichern sie in der Datei cronedit (1. Zeile). Anschließend fügen wir an diese Datei unseren neuen Cronjob ein (2. Zeile), lesen die Datei erneut ein (3. Zeile) und löschen sie (4. Zeile).

 

 

Cron Log ansehen

Daher ist es hilfreich den Log zu überprüfen. Standardmäßig wird der Cron Log unter /var/syslog gespeichert. Da hier jedoch auch noch andere Teile des Systems ihre Tätigkeiten protokollieren, solltest du die Ausgabe filtern:

grep CRON /var/log/syslog

So wird dir nur der Cron Log angezeigt, und du kannst überprüfen, ob die Aufgaben - wie gewünscht - ausgeführt wurden.

Weitere Möglichkeiten mit Crontab

Wer die Crontab mit einem anderen Editor bearbeiten will, muss dafür den Standardeditor des Benutzers ändern. Öffne dafür die ~/.bashrc mit einem Editor der Wahl. Füge dort die folgenden Zeilen ein oder ersetze die bisherigen, sollten sie bereits vorhanden sein:

export EDITOR=[editor_name]

Füge statt [editor_name] den Namen deines Wunscheditors ein, z.B. "vim". Nun muss die Datei nur noch gespeichert und geschlossen werden.

Der Befehl Crontab selbst kennt noch weitere Parameter als nur "-e" zum Editieren der eigenen Crontab. Mit crontab -l werden die eigenen Cronjobs aufgelistet und mit crontab -u [username] -e kann man, sofern man über die entsprechenden Rechte verfügt, die Crontab eines anderen Benutzers editieren.

Fazit

Grundlegende Kenntnisse und Erfahrung mit Linux reichen aus, um eine eigene Crontab anzulegen. So können Cronjobs erstellt werden, ohne, dass man auf einen externen Anbieter angewiesen ist. Wem das dann doch zu kompliziert ist, oder wer über keinen eigenen Server verfügt, der kann sich auch einen Überblick über die getesteten Anbieter verschaffen oder einen Hosting-Tarif mit Cronjobs inklusive wählen.