Sonntag, 12. Februar 2012

entwickler.com Magazine Konferenzen Entwickler Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag

Die Dämonen kommen

Wenn auf der Festplatte längere Aktivitäten zu verzeichnen sind, ist meistens cron am Werk. Der Daemon führt regelmäßig im Hintergrund bestimmte Befehle zur Wartung und Pflege des Systems aus. Zu den Aufgaben gehört unter anderem das Abschneiden von Logging-Files, die automatische Suche nach verdächtigen Skripts sowie das Löschen temporärer Dateien.
Cron wird während der Startphase hochgefahren und liegt dann auf der Lauer. Das Programm prüft im Minutentakt die globale Datei /etc/crontab; treffen die Vorgaben zu, werden die entsprechenden Befehle ausgeführt. Ein cronjob ist grundsätzlich nach folgendem Schema aufgebaut:


min hour day month weekday command

Das sind also sechs Spalten pro Zeile:

1 - min (0-59)

2 - hour (0-23)

3 - day (1-31)

4 - month (1-12)

5 - weekday (0-6, 0 ist Sonntag)

6 - command (absoluter Pfad zum Script)


Einige Distributionen (Red Hat, Suse, Debian, Mandrake etc.) liefern zudem grafische Frontends für die Verwaltung solcher Jobs: Gnome hat beispielsweise gcrontab an Bord, die KDE-Variante heisst kcron. Der Aufruf /usr/bin/crontab -h fördert wichtige Optionen zutage. Mit

/usr/bin/crontab -e

können Sie den Job direkt editieren (entweder mit Emacs oder vim); geben Sie vor dem Editieren export EDITOR=emacs auf der Shell ein, falls Sie vim nicht mögen. Mit

/usr/bin/crontab -l

lässt sich ein Job auf der Standardausgabe anzeigen.

[root@localhost ]# crontab -l
no crontab for root

Wie Sie sehen, ist kein Job (ausser den voreingestellten Standardjobs für die Systemwartung) definiert. Ein einfaches Beispiel wird abschliessend den Umgang mit cron demonstrieren. Um einen neuen Job festzulegen, muss zuerst eine Datei erstellt werden (der Dateiname lautet my_cron_job). Der Inhalt:

45 14 * * * echo "Backup nicht vergessen" | mail ich

Was passiert hier? Diese Anweisung führt den Befehl echo täglich um 14.45 Uhr aus und erinnert Sie daran, das Backup nicht zu vergessen. Tipp: man kann pro Spalte mehrere Werte, getrennt durch ein Komma, verwenden:

0 1,13 * * * echo "Backup nicht vergessen" | mail ich

Dieser Befehl würde um 1 Uhr morgens sowie um 13:00 Uhr täglich ausgeführt werden. Jetzt muss dem System noch mitgeteilt werden, dass es einen neuen Job gibt:

root@localhost:~#crontab my_cron_job

Die neue Datei wird automatisch nach /var/spool/cron verschoben (falls nicht, suchen Sie mit locate my_cron_job danach). Der Test:

[root@localhost forum_print]# crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (my_cron_job installed on Tue May 3 14:43:49 2005)
# (Cron version -- : crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp )

46 14 * * * echo "Backup nicht vergessen" | mail ich

Der neue Job existiert also. Falls Sie auf Probleme stossen, helfen entweder man cron oder man crontab weiter. Viel Spass.

Thomas Kaufmann







Software & Support Verlag GmbH