Good to Know Database

Cron: Wiederkehrende Aufgaben mit Cron automatisieren


Cron ist ein Daemon um wiederkehrende Aufgaben automatisch auszuführen. Dazu liest der Cron-Daemon sogenannte Crontab-Dateien aus, in welchen die Aufgaben oder auch Cronjobs genannt definiert werden.

Die Datei /etc/crontab ist die zentrale Crontab-Datei des Systems und sollte nicht verändert werden.

Im etc-Verzeichnis finden Sie weiterhin die Verzeichnisse cron.hourly, cron.daily, cron.weekly und cron.monthly. Hier kann der Benutzer root eigene Skripte ablegen, welche zu den in der /etc/crontab hinterlegten Zeiten ausgeführt werden. Den genauen Zeitplan für die Cron-Verzeichnisse können Sie wie folgt herausfinden. Zu den Bedeutungen der einzelnen Felder kommen wir später.

[root@centos5 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Die bisher vorgestellte /etc/crontab und die Cron-Verzeichnisse sind nur dem Superuser root vorbehalten. Damit auch ein normaler Benutzer einen Cronjob erstellen beziehungsweise seine bereits bestehenden Cronjobs verwalten kann, gibt es den Befehl crontab. Diesen Befehl sollte auch der Benutzer root zum Erstellen eines Cronjobs verwenden. Die mit crontab erstellten Crontab-Dateien werden unter /var/spool/cron/crontabs/ beziehungsweise bei manchen Distributionen unter /var/spool/cron/ abgelegt und tragen den jeweiligen Benutzernamen als Dateinamen.

Mit dem Befehl crontab und der Option -e kann ein Benutzer seine Crontab-Datei zum Bearbeiten öffnen.

[root@centos5 ~]# crontab -e

Wollen Sie überprüfen welche Cronjobs konfiguriert sind, rufen Sie crontab mit der Option -l auf.

[root@centos5 ~]# crontab -l
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/root/

0 * * * * webalizer >/dev/null 2>&1
0 1 * * * /root/sh/mysql_backup.sh >/dev/null 2>&1
0 1 * * 5 /root/sh/cyrus_backup.sh >/dev/null 2>&1

Die Option -r löscht die Crontab-Datei und somit auch alle Cronjobs.

[root@centos5 ~]# crontab -r

Dem Superuser steht zusätzlich die Option -u zur Verfügung. Dadurch kann er einen Benutzernamen angeben und die Crontab-Datei des angegebenen Benutzers bearbeiten, anzeigen oder löschen.

[root@centos5 ~]# crontab -u georg -e

Der Superuser kann einzelnen Benutzern die Benutzung des Cron-Daemon mit der Datei /etc/cron.deny verbieten. Dazu müssen Sie jeweils einen Benutzernamen pro Zeile in die Datei eintragen. Alternativ können Sie die Datei /etc/cron.allow erstellen und dort alle berechtigten Benutzer eintragen. Sobald die Datei /etc/cron.allow existiert, wird die Datei /etc/cron.deny ignoriert und nur die Benutzer aus der Datei /etc/cron.allow können den Cron-Daemon verwenden. Sollten beide Dateien nicht existieren, ist nur der Superuser berechtigt den Cron-Daemon zu verwenden.

Nachdem Sie jetzt wissen wie man die Crontab-Dateien verwaltet, sollten wir uns den Aufbau eines Cronjobs genauer ansehen. Ein Cronjob wird durch eine einzelne Zeile definiert und kann zum Beispiel wie folgt aussehen.

0 * * * * webalizer >/dev/null 2>&1

Die Spalten haben von links nach rechts gelesen die folgenden Bedeutungen und können die in Klammern angegebenen Werte enthalten.

- Minute (0-59, * für jede Minute)
- Stunde (0-23, * für jede Stunde)
- Tag (1-31, * für jeden Tag)
- Monat (1-12, * für jeden Monat)
- Wochentag (0-7, 0 und 7 stehen für Sonntag, * für jeden Wochentag)
- auszuführender Befehl

In der Cronjob-Datei /etc/crontab befindet sich vor dem auszuführenden Befehl ein weiteres Feld, in welchem der Benutzername eingetragen wird, unter welchem der Befehl ausgeführt werden soll.

Neben den bereits aufgelisteten Werten gibt es einige Funktionen, mit welchen Sie die Ausführungszeiten definieren können.

Durch ein Komma können Sie mehrere Zeitangaben aufzählen. Der folgende Cronjob wird zum Beispiel jeden Tag um 7:00 und 15:00 Uhr ausgeführt.

0 7,15 * * * webalizer >/dev/null 2>&1

Einen Zeitraum können Sie mit einem Bindestrich definieren. Soll ein Cronjob zwischen 7:00 und 15:00 Uhr zu jeder vollen Stunde ausgeführt werden, sieht der Crontab-Eintrag wie folgt aus.

0 7-15 * * * webalizer >/dev/null 2>&1

Mit einem Schrägstrich können Sie eine Schrittweite festlegen oder anders ausgedrückt einen Zeitraum teilen. So wird der folgende Cronjob alle 15 Minuten ausgeführt.

*/15 * * * * webalizer >/dev/null 2>&1

Alternativ zu einer Zeitangabe im eben beschriebenen Format können Sie auch die folgenden Definitionen verwenden. Diese werden mit einem @-Zeichen eingeleitet und ersetzen die ersten fünf Spalten in der Crontab.

@reboot     Beim Systemstart ausführen
@yearly     Einmal jährlich ausführen    (0 0 1 1 *)
@annually   Einmal jährlich ausführen    (0 0 1 1 *)
@monthly    Einmal monatlich ausführen   (0 0 1 * *)
@weekly     Einmal wöchentlich ausführen (0 0 * * 0)
@daily      Einmal täglich ausführen     (0 0 * * *)
@hourly     Einmal stündlich ausführen   (0 * * * *)

Wenn Sie weitere Informationen zum Erstellen einer Cronjob-Tabelle benötigen, können Sie in der Manpage nachlesen.

[root@centos5 ~]# man 5 crontab

Wie Sie an den beiden gezeigten Crontab-Dateien sehen, befinden sich am Anfang der Datei einige Variablendeklarationen.

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/root/

Durch die Variable SHELL können Sie festlegen, mit welcher Shell die Cronjobs abgearbeitet werden sollen. Die Variable PATH legt die Suchpfade fest in welchen Programme und Skripte hinterlegt sind. Nach dem Ausführen eines Cronjobs werden dessen Ausgaben per E-Mail an den mit MAILTO hinterlegten Benutzer geschickt. Sollten Sie keine Mail-Benachrichtigung erhalten wollen, leiten Sie alle Ausgaben in eine Datei oder nach /dev/null um. Die Variable HOME legt das Arbeitsverzeichnis fest in welchem die Befehle ausgeführt werden sollen.


Dieser Eintrag wurde am 15.06.2009 erstellt und zuletzt am 26.05.2012 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_7_647.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer