Linux-Tipp 7
Zeitgesteuerte Abläufe
Welcher PC-Anwender
wollte nicht schon einmal ein Programm zu einem bestimmten
Zeitpunkt automatisch ausführen lassen? Sei es, um den
Rechner zu einem zuvor definierten Zeitpunkt herunterzufahren
oder um an die wartende Tasse Tee erinnert zu werden. Mit
Linux
sind solche Aufgaben schnell erledigt, denn das System bietet
bereits out of the box weitreichende
Möglichkeiten, Prozesse zeitgesteuert
auszuführen. Hierzu stellt Linux Ihnen mehrere Utilities
und Verfahren zur Verfügung.
crond
Das bekannteste Utility ist zweifelsohne der
cron-Dämon (crond), der bei praktisch allen
Distributionen automatisch beim Start des Mehrbenutzerbetriebs
aufgerufen wird. Gesteuert wird er zum einen über die
Dateien in seinem persönlichen Spool-Verzeichnis
(/var/spool/cron/crontabs) und zum anderen über die
Datei /etc/crontab. Erstere sollen uns im Folgenden nicht
interessieren (schließlich soll der Blick in die
Hilfeseiten auch noch lohnen ...). Deswegen wollen wir
uns im Folgenden der Datei /etc/crontab zuwenden.
Üblicherweise beginnt diese zunächst mit diversen
Einträgen, welche die Programme in den Verzeichnissen
/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly und
/etc/cron.monthly in den entsprechenden Zyklen (stündlich,
täglich, wöchentlich, monatlich) ausführen. Die
Dateien im Verzeichnis /etc/cron.d haben übrigens nichts
mit diesen Zyklen zu tun. Sie werden von crond als
Erweiterung zu der Datei /etc/crontab betrachtet.
Im Anschluss an die zuvor genannten Einträge ist nun Platz
für die eigenen, systemweiten Einstellungen. Jetzt
stellt sich natürlich die Frage, wie die Syntax einer
solchen Konfigurationszeile aussieht. Jede Zeile ist entweder
leer bzw. beginnt mit
einer Raute (#) und wird deswegen ignoriert, oder sie besteht
aus mindestens sechs Feldern. Die ersten fünf Felder
definieren dabei den oder die Zeitpunkt(e), zu denen der
betreffende Auftrag (Feld 6 bzw. 7) ausgeführt wird.
Die Bedeutung der Zeit-Felder von links nach rechts:
[Minute] [Stunde] [Tag des Monats] [Monat] [Wochentag]
Über die möglichen Werte geben die Hilfeseiten
detailliert Auskunft (man 5 crontab), so dass wir an dieser
Stelle nicht weiter auf sie eingehen wollen. Außerdem
sind konkrete Beispiele ja auch viel hilfreicher ;-) :
Beispiel:
*/30 * * * * foo > /dev/null 2>&1
Dies führt den Befehl foo jeden Tag alle 30 Minuten aus.
Eine Benachrichtung per Mail erfolgt nicht (> /dev/null 2>&1).
Beispiel:
05 02,09,19 * * * foo > /dev/null 2>&1
Dies führt den Befehl foo um 02:05, 09:05 und 19:05 Uhr jeden
Tag aus. Eine Benachrichtung per Mail erfolgt nicht (>
/dev/null 2>&1).
Beispiel:
05 02 * * 0 foo
Dies führt den Befehl foo jeden Sonntag um 02:05 Uhr
aus. An den Systemverwalter (root) wird eine Nachricht per Mail
verschickt, soweit in der Datei /etc/crontab nicht die
Umgebungsvariable MAILTO einen anderen Empfänger
(z. B. MAILTO=testbenutzer) spezifiziert. Das obige
Beispiel kann auch wie folgt geschrieben werden:
05 02 * * sun foo
05 02 * * 7 foo
Alle drei Aufrufe sind äquivalent.
Beispiel:
05 07-19/01 * * * foo > /dev/null 2>&1
Dies führt den Befehl foo jeden Tag von 07:00 bis 19.00
Uhr stündlich fünf Minuten nach der vollen Stunde
(07:05, 08:05 und so weiter) aus. Eine Benachrichtung per
Mail erfolgt nicht (> /dev/null 2>&1).
at
So praktisch der crond-Dämon und seine crontab bei
wiederkehrenden Aufgaben auch sind, so unhandlich sind sie
bei einmaligen Ereignissen. Für diesen Zweck gibt es den
at-Dämon und den Befehl at. Mit letzerem haben Sie
die Möglichkeit, die zeitversetzte Ausführung von
Kommandos in Auftrag zu geben. Die zu bearbeitenden Kommandos
werden hierbei von STIN
gelesen.
Beispiel:
echo "shutdown -h now" | at now + 60 minutes
Dieser Befehl – als Systemverwalter (root)
ausgeführt – sorgt dafür, dass atd Ihr
Linux-System in 60 Minuten ab dem aktuellen Zeitpunkt
herunterfährt.
Die von atd verwaltete Warteschlange können Sie sich
über den Befehl atq (oder at -l) anzeigen lassen.
Versehentlich dort eingestellte Aufträge löscht
der Befehl atrm [JOBNUMMER].
Der Befehl at ist nicht unbedingt ein Privileg des
Systemverwalters. Über die Datei /etc/at.allow bzw.
/etc/at.deny kann root bestimmen, wer dieses Kommando
benutzen darf (at.allow) und wer nicht (at.deny).
Übrigens: atd kann Aufträge auch lastabhängig
ausführen (batch).
Schauen Sie doch einmal in die Hilfeseiten (man at).
Weiterführende Literatur:
|