Ob man seinen Rechner der MP3-Sammlung sei dank allmorgendlich als Wecker missbrauchen oder sich langweiliger, immer wiederkehrender Aufgaben bei der Systemadministration entledigen möchte – die Lösung des Problems heißt Cron, ein Dienst, der als Dämon namens cron oder crond still im Hintergrund vor sich hin werkelt.
Die Zentrale
Die zentrale Anlaufstelle, um sich der lästigen Pflichten zu entledigen, trägt den Namen /etc/crontab. Jede Minute kommt der Linux-Cron-Daemon angestolpert, um darin und in den persönlichen Crontabellen der User nachzuschauen, ob sich ein Auftrag findet, den es in dieser Minute zu erledigen gilt.
Während normalsterbliche Benutzer/innen sich des Programms crontab bedienen, das einen Editor aufruft und die syntaktische Korrektheit der Aufträge für cron überwacht, liegt die Verantwortung für die systemweite Crontabelle allein bei der Administratorin root und ihrem Lieblingseditor.
Auf den ersten Blick mag die Auftragsliste für Cron – Listing 1 zeigt ein Beispiel – etwas Erschrecken auslösen. Doch bei genauerer Betrachtung und/oder einem vergnüglichen Abend mit der ausnahmsweise auch für Nicht-Gurus gut verständlichen Manpage ( crontab) kommt man recht schnell hinter das Schema, das von Tabelle 1 erklärt wird.
Tabelle 1: Format eines Crontab-Eintrags
| Minute(n) | Stunde(n) | Tag(e) | Monat(e) | Wochentag(e) | User | auszuführender Befehl |
| mögliche Werte | ||||||
|---|---|---|---|---|---|---|
| 0–59 oder der Platzhalter *, der für alle Minuten von 0--59 steht | 0–23, * ("jede Stunde") | 1–31, * ("jeden Tag im Monat") | 1–12, * ("jeden Monat"), Jan–Dec oder jan–dec | 0–7, wobei sowohl 0 als auch 7 für Sonntag stehen können, * ("jeden Wochentag"), Sun–Sat oder sun–sat | nur in /etc/crontab: der Username der Benutzerin, mit deren Rechten der Befehl ausgeführt werden soll | |
Damit Cron seine Aufträge versteht, müssen sie in einem fest vorgegebenen sechs- (bei mit crontab erstellten, benutzerdefinierten Cron-Tabellen) bzw. siebenspaltigen (/etc/crontab) Tabellenformat aufgeschrieben werden. Ein Eintrag darf dabei keinen Zeilenumbruch enthalten und (in aller Regel) 1024 Zeichen nicht überschreiten.
Wer der Übersichtlichkeit wegen gern den einen oder anderen harten Zeilenumbruch einfügen will, kann das zwar tun, doch muss dann als letztes Zeichen vor dem Gebrauch der Enter-Taste ein \ stehen.
Als Spaltentrenner dienen normalerweise Leer- oder Tabulatorzeichen, und mit einem # am Anfang einer Zeile bestimmt man den Rest als wichtig für Menschen, jedoch unwichtig für Cron, also zum Kommentar.
Die systemweite Aufgabenliste für Cron in Listing 1 enthält demnach drei Aufträge: Täglich um 6.42 Uhr wird der Crondämon mit den Rechten von root das Kommando run-parts /etc/cron.daily ausführen. Jeden Sonntag (7) um 6.47 Uhr ist ein Lauf von run-parts /etc/cron.weekly fällig, und an jedem Ersten des Monats kommt fünf Minuten später (6.52 Uhr) noch ein run-parts /etc/cron.monthly hinzu.
Advanced Features
Neben den in Tabelle 1 angegebenen "einfachen" Angaben gibt es bei den unter Linux verwendeten Cron-Daemonen auch noch ein paar komplexere Möglichkeiten, Zeiten festzulegen:
- Ein Minus (-) legt einen Zeitraum fest: 1-3 (ohne Leerzeichen dazwischen!) kann, je nach Spalte, "ein bis drei Minuten nach der vollen Stunde", "von 1 bis 3 Uhr", die ersten drei Tage eines Monats, "Januar bis März" oder aber "Montag bis Mittwoch" bedeuten.
- Mit einem Komma lassen sich mehrere Zeitangaben trennen: 2,6 bedeutet in Spalte 1 "um zwei und sechs Minuten nach der in Spalte 2 angegebenen Stunde", in Spalte 2 "um 2 sowie 6 Uhr und den in Spalte 1 angegebenen Minuten", in der dritten Spalte "am 2. und 6. des Monats", an vierter Stelle "im Februar und im Juni" sowie in der Wochentagsspalte "am Dienstag und am Samstag". Dabei kann man auch Zeiträume kombinieren: 1-3,6,8-9 in der vierten (also der Monats-) Spalte steht für "Januar bis März, Juni, August und September".
- Mit einem / und nachgestellter Zahl lassen sich Zeiträume "mit Lücken" angeben: */2 bedeutet – je nach Spalte – "alle 2 Minuten, Stunden, Tage, Monate, Wochentage", 1-6/2 ist dasselbe wie 1,3,5.
Mit einem /etc/crontab-Eintrag wie
43 5,13,21 * * * listar /home/listar/bin/gen-archive
wird der Cron-Daemon z. B. mit den Rechten des Benutzers listar um 5.43 Uhr, um 13.43 Uhr und um 21.43 Uhr das Programm /home/listar/bin/gen-archive ausführen. Dieses Beispiel stammt von einem Mailinglisten-Server und zeigt, dass Cron nicht etwa nur Systemprogramme, sondern z. B. auch von der Administratorin selbst geschriebene Shellskripte ausführen kann.
Gerade bei solchen zusammengesetzten Zeitangaben wie der Stundenangabe 5,13,21 empfiehlt es sich, darauf zu achten, dass man keine zusätzlichen Leerzeichen versehentlich einfügt – bei Manipulationen an der /etc/crontab ist man schließlich selbst die letzte Kontrollinstanz.
Listing 1
Beispiel einer systemweiten <I>/etc/crontab<I>
# /etc/crontab: systemweite Crontab # Anders als bei jeder anderen Crontab benoetigen # Sie das Kommando `crontab' hier nicht, um eine # geaenderte Version dieser Datei zu installieren. # Dieses File enthaelt zudem ein Feld "Benutzername", # das in anderen Crontabelle fehlt. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 42 6 * * * root run-parts /etc/cron.daily 47 6 * * 7 root run-parts /etc/cron.weekly 52 6 1 * * root run-parts /etc/cron.monthly



