Vollbild
Drucken

Zeitgesteuerte Ausführung von Befehlen mit Cron

Präambel

Eine der wichtigsten Funktionen des Systems für den Administrator ist es, das System für sich arbeiten zu lassen. Genau das ist es doch wofür Computer und Systeme geschaffen wurden!? Was für ein Sinn würden unsere digitalen Helfer also machen, wenn man jeden Befehl, jedes Programm manuell starten müßte?
Das automatische Ausführen von Anweisungen ist unter Linux und Unix die Aufgabe von cron. Im folgenden Beitrag wird gezeigt wie sgn. Cron Jobs angelegt werden.

Voraussetzungen

System: Linux - getestet auf Ubuntu und Debian
Installierte Pakete: cron


Personalisierte Cronjobs für Benutzer

Jeder autorisierte Benutzer des Systems kann seine eigene crontab(elle) anlegen. Dafür ist es nur nötig folgenden Befehl von der Konsole auszuführen:
crontab -e

Beim ersten Start des Befehls wird man nach dem Editor gefragt, den man standardmäßig mit cron verwenden möchte.
Unter Ubuntu kann man den ausgewählten Editor später in der Datei ~/.selected_editor ändern, bzw. durch das löschen Datei beim nächsten Start eine erneute Abfrage erzwingen.
In der sich öffnenden Datei können nun die Einträge vorgenommen werden, die unseren Zeitplan zur Ausführung von Programmen, Skripten und Befehlen beschreiben.
Die Einträge werden wie folgt vorgenommen:


Die Grafik sollte relativ selbsterklärend sein. In den Spalten die nummerische Werte beinhalten kann anstatt einer Zahl auch ein '*' verwendet werden. Das Symbol steht für "jeden".

Das Script im Beispiel wird also:
Spalte 1. zur 23. Minute...
Spalte 2. zur 23. Stunde...
Spalte 3. an jedem Datum im Monat...
Spalte 4. in jedem Monat...
Spalte 5. am 7. Tag der Woche...
Spalte 6. als Benutzer root...
Spalte 7. mit dem eingetragenen Befehl...
...ausgeführt.

Der aufmerksame Leser wird festgestellt haben, das die Wochentage von 0-7 nummeriert sind, und der Sonntag sowohl durch die 0, als auch die 7 symbolisiert wird. Hierbei handelt es sich jedoch um keinen Schreibfehler, sondern es wurde lediglich berücksichtigt das je nach Kulturkreis die Woche entweder mit dem Sonntag oder auch dem Montag beginnen kann.

Zu beachten gilt außerdem, das der Benutzer in der crontab nicht angegeben werden darf, falls er mit dem Ersteller des Eintrags übereinstimmt. In diesem Fall kommt es während der Ausführung zu einer Fehlmeldung die in etwa wie folgt aussieht: "cron error: grandchild #2323 failed with exit status 127"

Erweiterte Konfiguration

Das obige Beispiel stellt die einfachste Konfiguration in der Crontab dar. Allerdings kann man die Zeitsteuerung noch wesentlich komplexer gestalten, dazu dienen die Symbole "/", "-" und ",".
Die Symbole können wie folgt eingesetzt werden:

  1 . */15 *    * * * /opt/backup/backup.sh
  2 .   10    9-18 * * * /opt/backup/backup.sh
  3 .   23   23   * * 1,4 /opt/backup/backup.sh


In Zeile 1 wird das Backupscript alle 15 Minuten ausgeführt.
Das zweite Beispiel führt seine Anweisung immer 10 Minuten nach der vollen Stunde aus, allerdings nur von 9 bis 18 Uhr.
Im letzten Beispiel wird das Backup um 23:23 an jedem Montag und Donnerstag durchgeführt.

Zusätzlich zu diesen Symbolen wurden folgende Zeichenketten definiert um die crontab etwas "sprechender" zu gestalten

Schlüsselwörter in cron
*@reboot: Nach einem Neustart
*@hourly: Einmal pro Stunde (0 * * * *)
*@daily: Einmal am Tag (0 0 * * *)
*@weekly: Einmal pro Woche (0 0 * * 0)
*@monthly: Einmal im Monat (0 0 1 * *)
*@yearly: Einmal im Jahr (0 0 1 1 *)
*@annually: Einmal im Jahr (0 0 1 1 *)
*@midnight: Punkt Mitternacht (0 0 * * *)


Allgemeine Cronjobs des Systems

Wie bereits im letzten Abschnitt beschrieben, werden auf die beschriebene Weise personalisierte Cronjobs angelegt und im Allgemeinen kann auf die Angabe eines ausführenden Benutzers verzichtet werden.
Eine unabhängige Variante zur Einrichtung von zeigesteuerten Befehlen bietet die folgende Datei:
/etc/crontab
  1 . # /etc/crontab: system-wide crontab
  2 . # Unlike any other crontab you don't have to run the `crontab'
  3 . # command to install the new version when you edit this file
  4 . # and files in /etc/cron.d. These files also have username fields,
  5 . # that none of the other crontabs do.
  6 . 
  7 . SHELL=/bin/sh
  8 . PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  9 . 
 10 . # m h dom mon dow user	command
 11 . 17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
 12 . 25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
 13 . 47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
 14 . 52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
 15 . #


In dieser Datei ist es zwingend notwendig einen Benutzer anzugeben, mit dessen Rechten der folgende Befehl ausgeführt werden soll.
Alle hier konfigurierten Einträge sind von allen berechtigten Benutzern einseh- und änderbar, die personalisierten Scripts aus dem ersten Abschnitt jedoch nur vom jeweiligen Benutzer.

Die in der Datei beschriebenen Einträge verweisen übrigens auf anacron, eine weitere Variante zur automatisierten Ausführung von Befehlen.



Crontab Befehle

Folgende Befehle bzw. Parameter sollten für den Umgang mit crontab bekannt sein:

crontab -l
Listet alle crontab Einträge des aktuellen Benutzers auf.

crontab -e
Startet den Editor zur Erstellung und Änderung von crontab Einträgen des aktuellen Benutzers.

crontab -r
Löscht alle crontab Befehle des aktuellen Benutzers

Alle Befehle können mit dem zusätzlichen Parameter "-u <Benutzername>" für andere als den gerade angemeldeten Benutzer genutzt werden:

crontab -l -u <Benutzername>
Listet alle crontab Einträge des angegebenen Benutzers auf.

crontab -e -u <Benutzername>
Startet den Editor zur Erstellung und Änderung von crontab Einträgen des angegebenen Benutzers .

crontab -r -u <Benutzername>
Löscht alle crontab Befehle des angegebenen Benutzers


Erstellt von . Letzte Änderung: Freitag 12 . August, 2011 12:41:08 UTC by mark213 Punkte . (Version 27)