claim.gif
Linux Magazin Linux User Easy Linux Ubuntu User International Linux Community
Erschienen in EasyLinux 04/2004   »   Ausgabe bestellen

Wiederkehrende Programmläufe mit Cron und KCron planen

Mit der Zeit gehen

von Christian Baun


Regelmäßige Aufgaben erledigen Linux-Benutzer nicht mit der Stoppuhr und per Hand, sondern mit cron -- dem Systemdienst, der Programme zeitgesteuert ausführt. Natürlich gibt es auch ein grafisches Konfigurationstool: KCron.

Cron ist ein Systemdienst, der unbemerkt im Hintergrund läuft und regelmäßig Befehle und Programme ausführt [1, 2, 3]. Sie brauchen dabei nicht am Rechner sitzen oder angemeldet sein; der muss nur laufen. Die Liste der Anwendungsbeispiele ist lang: Beispielsweise sollte einmal die Woche das Verzeichnis /tmp gelöscht werden, um Platz zu sparen. Sinnvoll wäre auch ein regelmäßiges Backup der Verzeichnisse /etc und /home. Eine Erinnerungs-Mail vor dem Hochzeitstag könnte nicht schaden und Cron ersetzt den Wecker, der einen morgens aus den Federn reißt.

Der Plan

Was wann von cron ausgeführt werden soll -- den sogenannen cronjob --, legen Sie in der Datei crontab fest, die auf der Kommandozeile mit dem gleichnamigen Befehl angelegt und editiert wird. Um beide sicher zu unterscheiden, heißt die Tabelle in diesem Artikel Cron-Tabelle, für den Befehl bleibt es bei crontab. Die Datei liegt in einem Verzeichnis cron unterhalb des /var-Verzeichnisses -- einem Systemverzeichnis, in dem der gewöhnliche Benutzer kein Schreibrecht hat. Mit dem Befehl

crontab

legt dort jeder Benutzer eine eigene Datei an, in die er einträgt, welche Befehle er wann ausgeführt haben möchte. Daneben exisitieren noch weitere Cron-Tabellen im System, die -- je nach Distribution -- unterschiedliche Aufgaben der Systemwartung vorgeben. Der Systemdienst cron läuft als Hintergrundprogramm und liest alle diese Dateien minütlich aus, prüft, ob sich etwas geändert hat und führt fällige Programme aus. Der Auftraggeber, also der Eigentümer der Cron-Tabelle, bekommt per E-Mail Bescheid, ob das Programm erfolgreich ausgeführt wurde oder nicht.

Auf der Konsole

Ihre aktuelle Cron-Tabelle können Sie sich in der Shell mit dem Befehl crontab einsehen und bearbeiten:

Der Systemadminstrator kann alle Cron-Tabellen einsehen, ändern oder löschen -- auch die der anderen Benutzer. Dazu gibt er bei dem Befehl mit dem Parameter -u "Benutzername" an, wessen Tabelle er editieren will. Der folgende Befehl auf der Shell würde alle cronjobs des Benutzers tom ausgeben:

crontab -u tom -l

Der Befehl crontab ruft in der Voreinstellung den Editor vi auf. Wer einen anderen bevorzugt, legt diesen in der Umgebungsvariable EDITOR fest. Der folgende Befehl auf der Shell genügt, damit in Zukunft (für die Dauer der Anmeldung) die Cron-Tabelle stets mit dem Editor joe gestartet wird:

export EDITOR=/usr/bin/joe

Doch Vorsicht: Auch andere Kommandozeilenprogramme lesen die Umgebungsvariablen aus und benutzen sie entsprechend.

Strukturierte Tabellen

Jede Zeile in der Cron-Tabelle enthält einen Auftrag und besteht aus sechs Feldern. Die ersten fünf bestimmen, zu welchem Zeitpunkt genau der Befehl ausgeführt werden soll; das letzte Feld enthält den Namen des Befehls samt etwaiger Parameter. Das genügt, um das Programm, Skript oder Kommando auf die Minute genau in beliebigen Zyklen zu wiederholen.

Tabelle 1: Format der Cron-Tabelle
Spalte123456
BedeutungMinuteStundeTagMonatWochentagauszuführender Befehl
Wert0-59 oder *0-23 oder *1-31 oder *1-12, Jan-Dec oder jan-dec oder *0-6, Sun-Sat oder sun-sat oder *Programmname (und Pfad)

Ein Eintrag in der Cron-Tabelle darf auf keinen Fall einen Zeilenumbruch enthalten und nicht länger als 1024 Zeichen sein. Längere Programmnamen lassen sich aber durch Aliase oder Shell-Skripte ersetzen, um das Limit einzuhalten.

Kommentare beginnen in der Cron-Tabelle mit einer Raute (#). Es ist übrigens möglich, mehr als einen Wert pro Zeitspalte anzugeben -- die werden dann durch Kommas getrennt.

Ein einfaches Beispiel: Sie möchten sich von cron an jedem Werktag um 7:10 Uhr mit Ihrem Lieblingslied wecken lassen. Folgender Eintrag in der Cron-Tabelle erledigt das:

10 7 * * 1,2,3,4,5      mpg123 song.mp3

Wenn Sie den kompletten Inhalt des Verzeichnisses /tmp an jedem Sonntag und Mittwoch um 13 Uhr löschen möchten, brauchen Sie diesen Eintrag:

0 13 * * Wed,Sun rm -rf /tmp >/dev/null

Der Zusatz > /dev/null sorgt dafür, dass die Erfolgsmeldung nicht per E-Mail an Sie geschickt wird, sondern ins Datengrab /dev/null. Wie alles, was Sie in diese Pseudodatei schreiben, verschwindet auch diese E-Mail.

Einfach grafisch: KCron

Bequemer planen Sie Ihre Cronjobs mit dem grafischen KDE-Tool KCron [4]. Unter SuSE finden Sie das Werkzeug über K-Menü / System / Konfiguration.

Beim ersten Start begrüßt Sie KCron mit dem Hinweis, dass Sie neue Aufgaben in die Cron-Tabelle eintragen, indem Sie den Ordner Aufgaben auswählen, und im Dateimenü Bearbeiten auf Neu klicken (Abbildungen 1 und 2).

Abb. 1: Das Begrüßungsfenster mit der Kurzanleitung für KCron.

Abb. 2: Neue Cronjobs per Klick: Das KCron-Hauptfenster.

Neue Aufgaben stellen Sie über das Aufgabenfenster (Abbildung 3) in die Cron-Tabelle ein. Hier klicken Sie zusammen, was zu welcher Zeit ausgeführt werden soll. KCron generiert daraus den passenden Eintrag. Unter Programm legen Sie fest, welches Programm mit welchen Parametern gestartet werden soll. Im Feld Kommentar empfiehlt sich eine Kurzbeschriebung des Auftrags -- schon damit Sie nach einem halben Jahr noch erkennen, was der Cronjob eigentlich tut.

Mit der Checkbox Aktiviert schalten Sie Cronjobs an und aus, ohne dass der Eintrag gelöscht oder neu eingetippt werden muss.

Abb. 3: Neue Aufgaben festlegen.

Mit KCron können Sie nicht nur Aufgaben, sondern auch Umgebungsvariablen (Abbildung 4) setzen und ändern. Die Standard-Umgebungsvariablen bei Cron sind MAILTO, PATH, HOME und SHELL. Wählen Sie dafür den Ordner Variablen aus und klicken Sie im Dateimenü Bearbeiten auf Neu.

Abb. 4: Neue Variablen festlegen.

Mit der Umgebungsvariable MAILTO legen Sie fest, an wen die Vollzugs-Mail gehen soll; normalerweise ist das der Benutzer, dem auch die Cron-Tabelle gehört. Soll überhaupt keine E-Mail verschickt werden, tragen Sie folgende Zeile ein:

MAILTO=""

Sollen mehrere Benutzer Bescheid wissen, geben Sie deren Namen durch Kommas getrennt an.

Shell-Variablen überschreiben

Mit der Umgebungsvariable PATH überschreiben Sie die Suchpfade Ihrer Shell und mit SHELL definieren Sie, in welcher Shell die Aufgaben ausgeführt werden sollen -- schließlich ist die Shell ein Programm wie jedes andere und kann gegen Alternativen ausgetauscht werden. Statt der Bash, der Linux-Standardshell, möchten Sie vielleicht die TC-Shell benutzen, deren Syntax eher an die Programmiersprache C angelehnt ist.

Die Umgebungsvariable HOME ersetzt das Basisverzeichnis. Da Sie nur unterhalb Ihres echten Benutzerverzeichnisses Schreibrechte haben, besteht kaum Anlass, dies zu ändern.

Die Crontabelle wird von oben nach unten abgearbeitet, so können Sie für jeden Auftrag die Umgebungsvariablen neu definieren. Zum Beispiel jeweilige Vollzugsmeldung durch erneutes Definieren von MAIL an wechselnde Benutzer senden lassen.

Abb. 5: Die Übersicht über die Aufgaben.

Aufträge und Umgebungsvariablen sehen Sie im Hauptfenster von KCron. Hier kontrollieren Sie, ob alles richtig eingetragen ist. In der Spalte Aufgaben/Variablen steht der zugewiesene Kommentar, unter Wert der jeweilige Befehl und in der Spalte Beschreibung der Zeitpunkt, an dem er ausgeführt wird.

Im Menü Bearbeiten können Sie definierte Aufgaben Ändern, Löschen und Jetzt starten. Mit Jetzt starten lässt sich ein neuer Cronjob übrigens vorzüglich testen. (fan)

Infos
[1] Wem die Stunde schlägt", Patricia Jung, Linux-Magazin 8/1998: http://www.linux-magazin.de/Artikel/ausgabe/1998/08/Cron/cron.html
[2] Diener auf die Minute", Patricia Jung, LinuxUser 12/2000: http://www.linux-magazin.de/Artikel/ausgabe/2000/12/080-cron/cron-1.html
[3] Auftragsersteller vom Dienst", Patricia Jung, Linux-Magazin 1/2001: http://www.linux-magazin.de/Artikel/ausgabe/2001/01/077-crontabmanager/crontabmanager.html
[4] KCron, Anwendung des Monats August 2003, http://www.kde.de/appmonth/2002/kcron/beschreibung.php

Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.

Druckerfreundliche Version | Feedback zu dieser Seite | Datenschutz | © 2017 COMPUTEC MEDIA GmbH | Last modified: 2007-01-25 17:09

Nutzungsbasierte Onlinewerbung

[Linux-Magazin] [LinuxUser] [Linux-Community] [Admin-Magazin] [Ubuntu User] [Smart Developer] [Linux Events] [Linux Magazine] [Ubuntu User] [Admin Magazine] [Smart Developer] [Linux Magazine Poland] [Linux Community Poland] [Linux Magazine Brasil] [Linux Magazine Spain] [Linux Technical Review]