Startseite >> Tipps und Tricks >> Linux

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:

Picture

Linux