Cron, At

Aus LinuxUser 02/2006

Cron, At

Punktlandung

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.

Abbildung 1: At informiert den Benutzer per E-Mail über getane Arbeit.

Abbildung 1: At informiert den Benutzer per E-Mail über getane Arbeit.

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 0 bis 59 möglich; alternativ der Platzhalter *
  • Stunde: Werte von 0 bis 23 oder *
  • Tag: Werte von 1 bis 31 oder *
  • Monat: 1 bis 12, Jan bis Dec, jan bis dec oder *
  • Wochentag: 0 bis 7 (wobei sowohl die 0 als auch die 7 für “Sonntag” stehen), Sun bis Sat, sun bis sat oder *
  • 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.

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 httpd auf, der SSH-Server heißtsshd.

LinuxUser 02/2006 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben