Cron- und At-Jobs automatisieren Abläufe auf dem Linux-System, rotieren Logfiles, erstellen automatisch Backups und wecken Sie morgens mit der eigenen MP3-Sammlung – auf Wunsch nur an bestimmten Tagen. Wir zeigen, wie Sie Dinge punktgenau erledigen lassen.
Was Du heute kannst besorgen… Dinge, die Sie zu einem späteren Zeitpunkt auf einem Linux-System ausführen wollen, müssen Sie nicht umständlich notieren, um diese dann doch wieder zu vergessen: Mit dem Programm At definieren Sie sofort, was irgendwann später einmal passieren soll, und auch Cron erledigt zuverlässig immer wiederkehrende Aufgaben automatisch.
Damit diese Aufgaben pünktlich erledigt werden, werkelt im Hintergrund in beiden Fällen ein so genannter Daemon, der jede Minute nachschaut, ob es neue Aufträge gibt. Der At-Daemon heißt atd, und bei Cron ist cron(d) verantwortlich.
At zu Diensten
Sie rufen At aus der Kommandozeile heraus auf und übergeben weiterhin den Zeitpunkt, an dem At den Auftrag ausführen soll. Anschließend tippen Sie in einer Art Shell weitere Kommandos ein und beenden At danach durch Drücken der Tastenkombination [Strg]+[D]:
$ at 07:00 warning: commands will be executed using /bin/sh at> mpg321 -z /home/huhn/mp3/* at> <EOT> job 6 at 2006-01-03 07:00
Pünktlich um 7 Uhr am nächsten Morgen weckt Sie nun der Kommandozeilen-Player Mpg321, indem er Songs aus dem Verzeichnis /home/huhn/mp3/ in zufälliger Reihenfolge abspielt – natürlich muss der Rechner dann auch eingeschaltet sein.
Den Zeitpunkt können Sie auf ganz unterschiedliche Weise angeben; die Tabelle “Zeitformate für At” listet die gebräuchlichsten Schreibweisen auf. Beachten Sie, dass At auch das Neustarten des Rechners überlebt und sich merkt, was in den nächsten sechs Monaten auf dem Plan steht.
Zeitformate für At
| Format | Bedeutung |
|---|---|
16:16 |
16:16 Uhr am heutigen Tag. |
07:00pm |
19:00 Uhr am heutigen Tag (ohne Angabe von am oder pm ist immer am gemeint). |
now |
Jetzt |
tomorrow |
Morgen |
today |
Heute |
now + 10min |
In zehn Minuten; weiterhin ist die Angabe von Stunden (hours), Tage (days), Wochen (weeks) und Monaten (months) möglich. |
noon tomorrow |
Um 12:00 Uhr am nächsten Tag; alternativ versteht At auch teatime (= 16:00 Uhr) oder midnight (= Mitternacht). |
6/9/06 |
Am 9. Juni 2006; alternative Schreibweisen für das Datum sind z. B. 6.9.06 und 6906. |
Nach getaner Arbeit schickt At eine Mail an den Auftraggeber und berichtet über den Job (Abbildung 1) – egal, ob dieser erfolgreich war oder eine Fehlermeldung verursacht hat. Damit das funktioniert, muss ein Mail-Server (zumindest für die lokale Zustellung) konfiguriert sein. Für Kommandos, die standardmäßig keine Ausgabe erzeugen, wie beispielsweise rm, mv oder cp, erzwingen Sie die Benachrichtigung per E-Mail. Dazu geben Sie beim Start die Option -m an, etwa at -m 13:31.
Jobs anzeigen und löschen
Alle At-Kommandos, die noch auf ihre Ausführung warten, finden Sie in der Warteschlange wieder. Diese zaubern Sie auf den Bildschirm, wenn Sie at -l oder atq aufrufen:
$ atq 7 2006-01-03 07:00 a huhnix 11 2006-01-03 12:00 a huhnix 12 2006-06-09 14:24 a huhnix
Leider gibt sich At an dieser Stelle nicht besonders informativ und verrät lediglich die Job-Nummer am Zeilenanfang, das Datum und die Uhrzeit, den Namen der Warteschlange (a) und den Benutzernamen. Welcher Befehl da aber auf seine Ausführung wartet, das lässt die Liste im Dunkeln. Als normaler Benutzer sehen Sie außerdem nur die eigenen Jobs; lediglich der Systemadministrator erhält eine vollständige Liste aller wartenden Aufträge.
Wer ganz genau wissen will, was die Zukunft bringt, schaut als Administrator ins Verzeichnis der At-Jobs unter /var/spool, zum Beispiel /var/spool/atjobs/ (bei Suse Linux) oder /var/spool/cron/atjobs/ (unter Debian) – die Textdateien verraten u. a. ganz am Ende, welcher Befehl ausgeführt wird.
Um einen At-Auftrag wieder zu löschen, geben Sie den Befehl at -d oder entsprechend atrm unter Angabe der Job-Nummer ein:
$ atrm 7 11 $ atq 12 2006-06-09 14:24 a huhnix
Zugangserlaubnis
Die beiden Dateien /etc/at.allow und /etc/at.deny regeln, wer mit At arbeiten darf. Auf den meisten Distributionen existiert lediglich die Datei at.deny, die einiige “Pseudobenutzer”, wie lp (für den Drucker-Daemon) oder mail (für den Mail-Daemon), enthält. Wenn Sie als Administrator eine Datei at.allow anlegen, dürfen ausschließlich die dort aufgeführten Benutzer At verwenden – at.deny wird in dem Fall nicht ausgewertet.
Ein Cron für alle Fälle
Wer regelmäßig Jobs zu vergeben hat, muss nicht jedes Mal wieder einen At-Aufruf starten – Linux bringt für diese Fälle bereits eine Lösung mit: Cron arbeitet ebenfalls im Hintergrund und führt regelmäßig Befehle aus. Auch dieses Programm braucht lediglich einen laufenden Rechner und “merkt” sich Aufträge, wenn Sie die Maschine rebooten. Die beiden Programme haben noch mehr Gemeinsamkeiten: Ebenso wie At berichtet Cron per E-Mail an den jeweiligen Account, dass ein Auftrag erfolgreich ausgeführt wurde.
Die einzelnen Aufträge heißen Cronjobs; diese verwalten Sie in der so genannten Crontab. In dieser Tabelle beschreiben Sie in insgesamt sechs Spalten, wann ein bestimmter Befehl auszuführen ist. Jedem Kommando wird dabei eine einzige Zeile zugewiesen. Die ersten fünf Felder beschreiben jeweils den Zeitpunkt; das sechste Feld enthält das auszuführende Programm mitsamt aller Parameter.
Eine solche Crontab legen Sie als Benutzer auf der Kommandozeile mit dem gleichnamigen Programm Crontab an. Dazu dient der Aufruf crontab -e; der Parameter -e signalisiert, dass Sie die Tabelle bearbeiten möchten.
Als Systemverwalter dürfen Sie darüber hinaus die Crontabs aller Benutzer verändern; dazu geben Sie zusammen mit dem Parameter -u den gewünschten Account-Namen an:
crontab -u huhn -e
Standardmäßig startet nun der Editor Vi – wer lieber einen anderen Text-Editor verwendet, setzt die Umgebungsvariable $EDITOR, etwa:
export EDITOR=/usr/bin/kwrite
Um das Verhalten dauerhaft zu machen, tragen Sie diese Zeile in die Konfigurationsdatei der Bash ein und lesen diese mit dem Befehl source ~/.bashrc neu ein.
Gut strukturiert
Die einzelnen Zeilen der Crontab dürfen keinen Umbruch enthalten; Kommentare in dieser Datei erkennen Sie an einem Rautezeichen am Zeilenanfang. In den sechs Feldern stehen der Reihe nach die folgenden Informationen:
- Minute: Werte von
0bis59möglich; alternativ der Platzhalter* - Stunde: Werte von
0bis23oder* - Tag: Werte von
1bis31oder* - Monat:
1bis12,JanbisDec,janbisdecoder* - Wochentag:
0bis7(wobei sowohl die0als auch die7für “Sonntag” stehen),SunbisSat,sunbissatoder* - Kommando: der auszuführende Befehl mit Optionen; alternativ steht hier der Name eines Skriptes mit weiteren Anweisungen
Wer sich jeden Morgen um 7 Uhr mit Musik wecken lassen möchte, fügt beispielsweise einen Eintrag der Form
0 7 * * * mpg321 -z /home/huhn/mp3/*
hinzu. In den einzelnen Feldern dürfen auch Werte durch Kommata voneinander abgetrennt stehen. Um den musikalischen Wecker am Samstag und Sonntag verstummen zu lassen, tragen Sie also beispielsweise im fünften Feld für den Wochentag
0 7 * * 1,2,3,4,5 mpg321 -z /home/huhn/mp3/*
ein. Alternativ geben Sie einen Bereich an, indem Sie einen Bindestrich einsetzen (1-5). Übersichtlicher ist es, die Wochentage beim Namen zu nennen:
0 7 * * mon-fri …
Ebenfalls praktisch ist die Kombination von Zeiträumen: Steht beispielsweise im vierten Feld für den Monat 1-4,7,10-12, bedeutet das “Januar bis April, Juli, Oktober bis Dezember”. Mit einem Schrägstrich und einer nachgestellten Ziffer definieren Sie weiterhin regelmäßige Zeiträume; so bedeutet */2 in der zweiten Spalte beispielsweise “alle zwei Stunden” und 1-6/2 steht für “1,3,5”.
Crontab anzeigen und löschen
Sämtliche Cron-Tabellen der Benutzer liegen im Verzeichnis /var. Dabei sortiert jede Distribution die Tabellen anders: Debian schreibt sie beispielsweise nach Benutzernamen sortiert nach /var/spool/cron/crontabs/, Suse Linux ordnet sie unter /var/spool/cron/tabs/ ein.
Da Sie als normaler Benutzer dort keine Leserechte haben, zeigen Sie Ihre eigene Crontab auf der Kommandozeile mit dem gleichnamigen Programm an:
$ crontab -l 10 8 * * mon-fri mpg321 -z /home/huhn/mp3/*
Um einzelne Einträge zu löschen, rufen Sie wiederum den Editor mit crontab -e auf; wer direkt die ganze Tabelle löschen will, nimmt stattdessen crontab -r zu Hilfe.
Systemweite Cron-Tabellen
Cron erledigt nicht nur die persönlichen Listen sämtlicher Benutzer, sondern hilft auch bei der Systemadministration. Werfen Sie als Administrator einen Blick in die Datei /etc/crontab, dann sehen Sie, welche Aufgaben Ihnen das Programm von Hause aus abnimmt. Je nach Distribution sieht die systemweite Crontab anders aus; bei Debian stehen hier beispielsweise Einträge wie in Listing 1 zu finden.
Listing 1
17 * * * * root run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily 47 6 * * 7 root test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly 52 6 1 * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly
Im Gegensatz zu den Benutzer-Crontabs gibt es hier ein siebtes Feld, welches den User-Namen des Benutzers enthält, mit dessen Rechten der Befehl ausgeführt wird – in der Regel ist das root. Die Aufgabenliste verrät unter anderem: Immer 17 Minuten nach der vollen Stunde führt der Cron-Daemon mit Administratorrechten das Kommando run-parts --report /etc/cron.hourly aus, und an jedem Ersten des Monats um 6:52 Uhr läuft run-parts --report /etc/cron.monthly. Tägliche Aufgaben (die ausführbaren Skripte in /etc/cron.daily) reledigt Cron um 6:25 Uhr: Hier finden Sie etwa das Skript logrotate, welches Logfiles rotiert, komprimiert und sortiert.
Läuft Ihr Rechner nicht 24 Stunden am Tag, so kann es sinnvoll sein, als Administrator diese Einträge anzupassen und Uhrzeiten einzugeben, an denen Sie genau wissen, dass der Rechner eingeschaltet ist:
25 17 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
Grafische Helfer für Cron
Es gibt zahlreiche grafische Programme, die Ihnen beim Erstellen einer eigenen Cron-Tabelle unter die Arme greifen. Gnome-Benutzer finden in Gcrontab ein übersichtliches und leicht zu bedienendes Programm, das mit wenigen Mausklicks eigene Aufgabenlisten zusammenstellt. Alternativ bietet sich das KDE-Tool KCron an, welches etwas leichter zu bedienen ist, allerdings fertige Einträge nicht in der Cron-Syntax anzeigt – ein Lerneffekt stellt sich hier nicht ein (Abbildung 2). Letztendlich bietet hier – wie so oft – die Kommandozeile mehr Flexibilität, und die Einträge lassen sich schneller tippen als “zurechtklicken”.

Abbildung 2: Verschiedene grafische Tools greifen beim Erstellen einer eigenen Crontab unter die Arme – hier Gcrontab und KCron im Einsatz.
Glossar
-
Daemon
-
Dienstprogramm, das auf Unix-Systemen im Hintergrund seine Arbeit verrichtet. Die Daemons werden meistens schon beim Booten des Rechners gestartet und tragen oft ein “d” an den Namen angehängt. So taucht etwa der Web Server Apache in der Prozessliste als
httpdauf, der SSH-Server heißtsshd.





