Cronjobs unter Linux
Virtuelle Schaltuhr

Allgemein

Einer der vielseitigsten Dämonen unter Linux ist crond. Er startet
beliebige Kommandos automatisch zu einem vorbestimmten Zeitpunkt – wie
eine virtuelle Schaltuhr.

Cron-Dämon

Cronjobs unter Linux

Im Allgemeinen wird der Cron-Dämon crond während des Hochfahrens von
Linux aufgerufen. Ab diesem Zeitpunkt arbeitet er im Hintergrund,
ähnlich wie der Webserver Apache, ein FTP-Server oder ein Mail-Server.

Der unter Linux verbreitete crond erlaubt prinzipiell allen Benutzern, mit dem
crontab-Kommando eine eigene Spalte im Terminkalender des Dämons
einzurichten. Die in dieser Spalte eingetragenen Befehle werden dann –
mit der Benutzerkennung des Auftraggebers – ausgeführt.

Die
Datei, die dem Dämon die für seine Arbeit notwendigen Informationen
liefert, heißt /etc/crontab. Der Cron-Dämon prüft ständig diese
Datei und die persönlichen Cron-Tabellen der User, ob sich in diesen
Aufgabenlisten ein Auftrag findet, den es in dieser Minute zu erledigen
gilt.


Definieren von Cronjobs

Cronjobs unter Linux

Um den Cron-Dämon live zu erleben, geben Sie in der Linux-Konsole das
Kommando crontab -l ein. Wenn keine Cronjobs definiert sind,
erhalten Sie die Antwort no crontab for xxx, wobei xxx für
den Usernamen steht. Im anderen Fall wird Ihnen die Tabelle mit den
Cronjobs des entsprechenden Users angezeigt.

Beim Aufruf von
crontab -e
wird der Editor Vi aufgerufen, mit dem Sie dann die
Cronjob-Tabelle bearbeiten und erweitern können.

Um einen Cronjob
zu definieren, legen Sie eine Tabelle an, deren Aufbau sehr einfach ist.
Für jeden Job, den der Cron-Dämon zu einem bestimmten Zeitpunkt zu
erledigen hat, ist jeweils eine Zeile in einem bestimmten Format
einzugeben. Sie enthält einen auszuführenden Befehl sowie die Uhrzeit
und das Datum seiner Ausführung.

Um zum Beispiel zu einem
bestimmten Zeitpunkt ein PHP-Skript zu starten, schreiben Sie folgende
Zeile:

30 05 * * * /usr/local/bin/php4 /var/www/test.php

Für die Befehlszeilen in der Cron-Tabelle gilt folgende Syntax:


Leerzeilen und Einrückungen und Tabulatoren werden ignoriert.


Zeilen mit einem #-Zeichen sind Kommentare und werden daher ebenfalls
ignoriert.

– Zu beachten ist, dass Kommentare nicht in der
gleichen Zeile stehen sollen wie die Cron-Kommandos.

– Eine
ausführbare Zeile in einem Crontab ist entweder eine Umgebungsvariable
für die Ausführung aller in dieser Datei aufgerufenen Kommandos oder
eine Zeitmaske mit zugehörigen Kommandos.


Zeitmasken

Cronjobs unter Linux

Am Beginn der Befehlszeile befindet sich die so genannte Zeitmaske. Sie
besteht aus fünf Feldern, die durch Leerzeichen voneinander getrennt
sind. Die Tabelle auf der nächsten Seite zeigt die Bedeutung sowie die
möglichen Werte der einzelnen Felder der Zeitmaske. So geben Sie
beispielsweise an erster Stelle die Minute gefolgt von der Stunde an,
wann der Job ausgeführt werden soll.

Ein Eintrag in der Crontab


0 1 1 * * cp /var/www/gaestebuch.xml /var/www/backup/

bedeutet
also, dass die XML-Datei eines Gästebuchs am ersten Tag jeden Monats in
das Verzeichnis backup gesichert wird, und zwar um ein Uhr nachts. Die
monatliche Wiederholung wird durch den Stern im Monatsfeld der Zeitmaske
sichergestellt.

Ein Stern in der Zeitmaske ist also
gleichbedeutend mit immer. Es ist auch möglich, pro Spalte mehrere Werte
einzugeben. Diese müssen dann durch Kommas getrennt werden.

Um
zum Beispiel eine Sicherung am ersten und am fünfzehnten Tag eines
Monats durchzuführen, ändert man die Beispielzeile wie folgt ab:


0 1 1,15 * * cp /var/www/gaestebuch.xml /var/www/backup/

Damit der
Cron-Dämon seine Arbeit aufnehmen kann, muss die erfasste Tabelle noch
in einem File gespeichert und der Cronjob aktiviert werden. Dies
geschieht mit Hilfe des Kommandos

crontab backup.gaeste

Erst nach dieser Aktion ist der Job aktiviert, und die Sicherungen der
Gästebuchdatei können zum gewünschten Zeitpunkt durchgeführt werden.

Für den Crontab-Befehl stehen zudem folgende weitere Optionen zur Steuerung
zur Verfügung:

– Mit der Option -u = user legen Sie den
Benutzernamen fest, in dessen Auftrag eine Termindatei ausgeführt wird.
Hierzu benötigen Sie root-Rechte.

– Die Option -d löscht
die Termindatei aus dem Verzeichnis ./crontabs.

– Mit der
Option -r = file ersetzen Sie die Termindatei im ./crontabs
-Verzeichnis durch die angegebene Datei.

Außerdem können Sie in
der Datei festlegen, mit welcher Shell die Skripts ausgeführt werden und
wem eine E-Mail mit dem Ergebnis zugesandt werden soll:


SHELL=/bin/bash
MAILTO=mir@localhost

Will man PHP-Skripts
zeitgesteuert ausführen lassen, geht das natürlich nicht direkt. Hier
muss zuerst der PHP-Interpreter gestartet werden. Als Parameter ist dann
der Pfad des PHP-Skripts anzugeben. Der PHP-Interpreter befindet sich in
der Regel im Verzeichnis /usr/local/ bin/php. Ein Beispiel für
den Start eines PHP-Skripts mit Hilfe des Cron-Dämons kann so aussehen:


0 1 * * * /usr/local/bin/php /var/www/maintenance.php

Auf einem
eigenen Linux-Server ist das Einrichten eines solchen Cronjobs kein
großes Problem, da man uneingeschränkten Zugriff hat.


Grafische Oberfläche

Cronjobs unter Linux

Wer sich nicht gerne auf der Ebene des Kommandomodus bewegt und keine
Lust hat, Cronjob-Tabellen mit schlichten Editoren zu bearbeiten, für
den stehen entsprechende Tools mit grafischer Oberfläche zur Verfügung.

Das KDE-Tool Kcron ist zum Beispiel ein solcher Helfer. Über das Dialogfenster
im Stil eines Taschenrechners lassen sich damit Cronjobs schnell und
einfach definieren. Auch reduziert sich bei dieser Methode die Gefahr
von Syntax- und Tippfehlern erheblich.


Cronjobs bei Webhostern

Cronjobs unter Linux

Problematischer ist die Sache für Webmaster, die Shared-Hosting-Angebote
nutzen. Ihnen ist in der Regel der Shell-Zugriff auf das
Linux-Basissystem verwehrt und damit die Möglichkeit zum Einrichten von
Cronjobs genommen. Es gibt jedoch vor allem bei Premium-Angeboten auch
Ausnahmen.

So bietet 1&1 (www.1und1.de) beim Power-Paket 4.0
einen Shell-Zugriff und die Möglichkeit, Cronjobs einzurichten.
Allerdings sollte man dabei den Hinweis des Providers beachten, dass die
Cronjobs mit einer niedrigeren Priorität laufen als die Webserver. Daher
kann es vorkommen, dass ein Job, der normalerweise 40 Sekunden läuft, in
einer Lastspitze des Rechners plötzlich auf zwei Minuten ausgedehnt wird.

Wird ein Job per Cron jede Minute gestartet, so laufen die gleichen Jobs
möglicherweise mehrfach und parallel. Das kann zu einer Überlastung des
Servers oder auch dazu führen, dass der Job seine eigenen Daten
überschreibt. Daher sollte man auf zu kurze Zeitintervalle besser
verzichten.

Eine interessante Variante zum Einrichten von
Cronjobs bietet Hosteurope (www.hosteurope.de) bei seinen
Dedicated-Webpack-Tarifen. Hier unterstützt ein spezielles Tool den
Anwender bei der Einrichtung von Cronjobs. Im Konfigurationsbereich
(KIS) steht dafür ein eigener Menüpunkt zur Verfügung, der den Webmaster
interaktiv zum Ziel führt. Nach einem Klick auf den Menüpunkt Neuen
Cronjob definieren
erscheint ein Formular, das vor allem die Eingabe
der Zeitmaske wesentlich erleichtert und Syntax- und Schreibfehler
weitgehend verhindert.

Beim Provider Domainfactory (www.
domainfactory.de) ist die Verwendung von Cronjobs in allen Tarifen ab
dem Virtual Server Light möglich. Allerdings gibt es hier einige
Einschränkungen. Bei der Tarifoption Cronjob Standard werden die
Cronjobs immer täglich zwischen drei und fünf Uhr morgens durchgeführt.
Eine genauere zeitliche Steuerung ist hierbei jedoch nicht möglich. Bei
der Variante Cronjob Professional können die Cronjobs zeitlich gesteuert
bis zu einer halben Stunde genau ausgeführt werden. Für die Einrichtung
der Cronjobs stellt der Provider im Konfigurationsbereich entsprechende
Menüpunkte zur Verfügung.

Praktisch ohne Einschränkungen kann man
als Mieter eines dedizierten Servers bei einem Hoster agieren. Wie bei
einem eigenen Linux-System stehen auch hier sämtliche Systemressourcen
zur Verfügung.