Wer sich die Liste laufender Prozesse auf seinem Unix-System einmal mit dem Aufruf »ps -ef|egrep (cron|atd)« näher ansieht, findet dort auch meist die beiden Daemons »atd« und »cron«. Beide sind dafür zuständig, Programme zeitgesteuert zu starten. Bei Cron legt der Administrator vorher fest, was zu welchem Zeitpunkt und wie oft passieren soll. Viele Linux-Distributionen enthalten schon einige vordefinierte so genannten Cronjobs.
Besonders praktisch ist das für aufwändige Jobs, die selbst einen modernen Computer vorübergehend auslasten und somit die reguläre Arbeit der Nutzer stören könnten. Daher legt der Administrator oder der Distributor sie in die Nacht, wenn wenige oder gar keine Benutzer am System arbeiten.
Ein typisches Beispiel ist die Datenbank von »locate«. Dieses Programm dient dazu, Dateien schnell zu finden, indem es einen Index aller vorhandenen Dateien im System erstellt. Um auf dem neuesten Stand zu bleiben, muss dieser Index aber regelmäßig aktualisiert werden. Auch die Datenbank für »whatis« und »apropos« muss das System stets aktuell halten.
Fester Zeitplan
Ein weiterer wichtiger Verwendungszweck von Cron ist das Steuern von Wartungsarbeiten, die das System konsistent halten. Beispielsweise sollte der Administrator Protokolldateien regelmäßig rotieren lassen, um Plattenplatz zu sparen. Zusätzlich ist es unter Umständen erforderlich, diese mit Gzip oder Bzip 2 zu komprimieren.
Es gibt zwar eine Menge Programme, die sich um die zeitgesteuerte Ausführung von Jobs kümmern, doch Cron (auch bekannt unter dem Namen Vixie Cron, nach seinem Erfinder Paul Vixie) ist der U(h)rvater dieser Software und viele Programme sind Derivate des ursprünglichen Vixie-Daemon.
Cron startet während des Bootvorgangs und prüft von da ab jede Minute, ob Jobs anstehen. Außerdem prüft der Daemon, ob sich an den Zeitplänen etwas geändert hat, sodass Änderungen ohne Neustart wirksam sind. Abbildung 1 zeigt einen solchen Zeitplan, auch Crontab genannt. Wie unter Unix üblich, sind Zeilen, die mit einem »#«-Zeichen anfangen, Kommentare.
Abbildung 1: Die Datei »/etc/crontab« ist die für das ganze System zuständige Master-Crontab. Meist kommt sie schon vorgefertigt vom Distributor auf den Rechner.
Flexible Syntax
Jede Job-Anweisung besteht aus einer Zeitangabe und dem auszuführenden Programm mit eventuellen Parametern. Die Zeitangabe besteht aus fünf Feldern, und zwar für Minute, Stunde, Tag, Monat und Wochentag. Die Wochentage sind einfach durchnummeriert, wobei »0« für Sonntag steht. Wer die Woche lieber mit Montag beginnen will, benutzt »7« für den Sonntag. Admins, die jetzt schon durcheinander kommen, können beruhigt sein: Ein Aufruf von »man 5 crontab« zeigt die Syntax der Crontabs detailliert an. Selbst erfahrene Sysadmins greifen gerne noch zu dieser Manpage, wenn es darum geht, einen neuen Job einzurichten.
Statt statischer Zeitangaben ist es auch möglich, Bereiche festzulegen. Ein »*« steht für einen Bereich von Anfang bis Ende, also zum Beispiel für jede Minute. Die Anweisung »* * * * *« legt fest, dass das Programm jeden Tag, zu jeder Stunde und jeder Minute starten soll. »37 * * * *« aktiviert es immer 37 Minuten nach der vollen Stunde. Es ist übrigens empfehlenswert, nicht die 0 zu benutzen, sondern krumme Werte wie 37 oder 21. Damit verringert sich die Wahrscheinlichkeit, dass viele Jobs gleichzeitig ablaufen und somit die Last steigt. Die Felder für Tag und Wochentag haben eine gesonderte Bedeutung: Sind beide Felder auf einen Wert (oder auf einen Bereich) gesetzt, verknüpft Cron sie zu einer Entweder-oder-Bedingung. So startet »37 2 1 * 0« einen Befehl also um 02:37 Uhr an jedem ersten des Monats sowie an jedem Sonntag.