Login
Newsletter
Werbung

Do, 4. Mai 2000, 00:00

Der Batchdaemon cron

Das auch unter Linux verbreitete cron führt beliebige Kommandos automatisch zu einer bestimmten Zeit aus.

Von Oliver

Einleitung

Computer wurden zuerst entwickelt, um Routineaufgaben automatisch zu erledigen. Wenn Sie täglich morgens um eins Ihre Festplatte sichern müssen, besteht kein Grund, dies jedesmal von Hand zu erledigen - erst recht nicht, wenn man dafür aus dem Bett kriechen müßte. Es sollte möglich sein, den Computer einmal anzuweisen, den Job zu erledigen und ihm die Angelegenheit dann zu überlassen. Auf UNIX-Sytemen übernimmt cron diese Art der Automatisierung für Sie. (Auszug: O`Reilly, "Linux: Wegweiser zur Installation und Konfiguration")

Der Batchdaemon crond

Das auch unter Linux verbreitete cron führt demnach beliebige Kommandos automatisch zu einer bestimmten Zeit aus. Dabei sieht der Daemon einmal pro Minute in seinen crontab-Tabellen ("Terminkalender") nach und führt gegebenenfalls alle anstehenden Kommandos zuverlässig aus. Dabei ist es verwunderlich, dass es eigentlich keinen Befehl cron gibt, sondern nur das Programm crontab und eben den Daemon crond. Dieser wird über eine der rc-Dateien des Systems beim Booten gestartet.

Zu solchen regelmäßigen Aufgaben zählen unter anderem die tägliche Sicherung der Benutzerdateien, die Aktualisierung der locate-Datenbank oder, bei der Anbindung ans Internet, ob in der Mail-Warteschlage irgendwelche Nachrichten hängen geblieben sind.

Die crontab-Tabellen

Die einzelnen crontab-Tabellen werden von dem jeweiligen Auftragsgeber verwaltet, wobei sich diese beispielsweise im systemabhängigen Verzeichnis /var/cron/crontabs/ befinden können - da es mehrere Implementierungen von cron gibt, kann das Verzeichnis auch /var/cron/tabs oder /var/spool/cron heißen. Es handelt sich dabei um ASCII-Dateien, die die auszuführenden Aufträge enthalten.

ACHTUNG! Auf manchen Systemen kann cron nur von root benutzt werden und das crontabs-Verzeichnis ist folglich für den normalen User nicht beschreibbar bzw. nicht einmal lesbar!

Der Befehl crontab

Mit dem Befehl crontab werden die Termintabellen verwaltet, wobei folgende Optionen möglich sind:

crontab
-u User
legt den Benutzernamen fest, in dessen Auftrag eine Termindatei ausgeführt werden soll. Diese Option ist nur für den root zugänglich.
-l
zeigt den Inhalt der aktuellen Termindatei an
-e
erstellt einen Auftrag mit Hilfe des Standardeditors vi
-d
löscht die Termindatei aus dem Verzeichnis /var/spool/cron/crontabs
-r Dateiname
ersetzt die Termindatei durch eine andere

Achtung! Da die genaue Syntax von der eingesetzten cron-Variante abhängig ist, sollte man die Manpages crontab(1) und besonders crontab(5) beachten.

Doch wer hat nun eigentlich Zugriffsrechte auf cron? Diese Frage ist generell nicht so einfach zu beantworten, da es mehrere Möglichkeiten gibt:

  • eine Datei allow existiert im cron-Verzeichnis, dies hat zur Folge, das alle darin aufgeführten Systembenutzer Zugriff auf den Befehl crontab haben.
  • eine Datei mit dem Namen deny existiert, folglich haben alle Systembenutzer, die NICHT darin aufgeführt sind, crontab zur Verfügung.
  • oder es ist keine Datei vorhanden, dies hängt von den Einstellungen bei der Kompilierung ab, so können nun entweder alle Benutzer den Befehl ausführen oder nur root.

Wichtig ist auch noch, zu wissen, dass crond die neuen Daten automatisch einliest, sobald eine Änderung des crontabs-Verzeichnisses durch crontab geschieht.

Beispiel zum Anlegen einer crontab-Datei

Man führt als erstes den Befehl crontab -e aus. Der Standardeditor vi erscheint und sie können mit dem Schreiben der Batchdatei beginnen. Geben Sie zunächst ein oder zwei Kommentarzeilen ein, diese sind durch ein Doppelkreuz (#) zu Beginn zu kennzeichnen, darauf folgt der eigentliche crontab-Eintrag mit Zeitangabe und dem auszuführenden Befehl. (Leerzeilen werden von crond genauso wenig wie Zeilen, die mit # beginnen, verarbeitet.)

# Alle Dateien von /tmp, die 3 Tage (oder älter) sind, werden gelöscht.
# Der Befehl wird jeden Tag um 1.00 Uhr durchgeführt
0 1 * * * find /tmp -atime +3 \! -type d -exec rm -f {} \;

Nun hätten wir einen vollständigen Eintrag, können ihn durch Verlassen des Editors vi speichern und dann mit crontab -l anzeigen lassen.

Doch wie genau wird crond die Startzeit mitgeteilt?

Dafür wird eine Maske mit fünf Felder benutzt, die wie folgt aufgebaut ist:

Feld 1 2 3 4 5
Bedeutung
des Feldes
Minute Stunde Tag Monat Wochentag
Bereich
der Werte
0-59 0-23 0-31 0-12 oder engl. Monatsname 0-7 oder engl. Wochentag
  • Jedes Feld kann mit * belegt werden. Das Feld wird dann nicht berücksichtigt.
  • Bei der Zahlendarstellung der Wochentage steht 1 für Montag, 2 für Dienstag und so weiter.
    ACHTUNG! 0 und 7 stehen für Sonntag!
  • Die Wochentage und Monate können auch mit ihren englischen Namen angesprochen werden, wobei die Groß- und Kleinschreibung ignoriert wird. Sie können auch auf drei Zeichen abgekürzt werden.
  • Die Felder können durch Komma getrennte Listen von Zeitangaben, sowie Bereiche der Form von-bis enthalten. Außerdem können Bereiche noch Divisionen enthalten, um die Schrittweite zu verändern. Beispiel: */5 = alle 5 Minuten, wenn es im ersten Feld steht.

Weitere Beispiele

# Der Computer wünscht uns einen "Ein gutes neues Jahr"
0 0 31 12 * echo %Ein gutes neues Jahr!
# newsrun wird von Montag bis Freitag jeweils von
# 7-20 Uhr zu jeder vollen Stunde ausgeführt.
0 7-20 0 * 1-5 /usr/lib/newsbin/input/newsrun
# Sichern der Directory /home am Ersten jedes zweiten Monats
# um 2.00 Uhr auf ein Bandlaufwerk mit zurückspulen des Bandes.
0 2 1 */2 * mt -f /def/rft0 rewind; tar cf /dev/rft0 /home

Shell, Variablen & Sicherheit

In den crontab-Einträgen lassen sich nur Befehle der Standard-Shell benutzen, was unter Linux meist bash ist. Um Features anderer Shells zu benutzen, starten Sie einfach ein Shellskript mit dieser Shell.

Allerdings können Variablen, wie $USER, $HOME und $SHELL verwenden werden. Sie alle setzen Ihr Home-Verzeichnis als aktuelles Verzeichnis.

Bezüglich der Sicherheit sollten Sysadmins darauf achten, dass häufig fiktive Benutzer, wie news oder uucp, crontab-Dateien anlegen! (Würden alle vom root erstellt, so würde dies eine unnötige Gefährdung des Systems darstellen!)

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung