(schedule periodic background work)
Mit crontab können Sie veranlassen, dass Kommandos, Shell-Prozeduren oder ausführbare Programme regelmäßig zu bestimmten Zeitpunkten ausgeführt werden.
Sie können mit crontab:
Kommandoaufträge erteilen (Format 1)
erteilte Aufträge ausgeben lassen (Format 2)
erteilte Aufträge löschen (Format 3)
erteilte Aufträge editieren (Format 4).
Aufträge, die mit crontab erteilt werden, bleiben auch dann erhalten, wenn der Auftraggeber mit exit die POSIX-Shell beendet oder das POSIX-Subsystem beendet wird. Die Aufträge müssen nicht neu gestartet werden.
Vor dem Aufruf beachten
Die Benutzerkennung muss eine Standardabrechnungsnummer für den rlogin-Zugang haben. Diese kann mit den Kommandos ADD-USER, MODIFY-USER-ATTRIBUTES oder ADD-POSIX-USER zugewiesen werden.
Wenn die Datei /usr/lib/cron/cron.allow existiert, dann dürfen Sie das Kommando crontab nur dann aufrufen, wenn Ihre Benutzerkennung in dieser Datei steht.
Wenn die Datei /usr/lib/cron/cron.allow nicht existiert, dann dürfen Sie das Kommando crontab nur dann aufrufen, wenn Ihre Benutzerkennung nicht in der Datei /usr/lib/cron/cron.deny steht.
Wenn weder /usr/lib/cron/cron.allow noch /usr/lib/cron/cron.deny existieren, dann darf nur der POSIX-Verwalter crontab aufrufen.
Existiert z.B. nur die leere deny-Datei, so dürfen alle Benutzer crontab aufrufen.
Die allow/deny-Dateien darf nur der POSIX-Verwalter anlegen und ändern. Sie enthalten pro Zeile eine Benutzerkennung.
Der POSIX-Verwalter muss vor dem Aufruf des crontab-Kommandos den Cron-Dämonen starten (/etc/init.d/cron
start).
Achtung!
Wenn Sie crontab versehentlich ohne Argumente aufrufen, dürfen Sie das Kommando nicht mit CTRL+D (bzw. @@d) abbrechen!
Denn in deisem Fall würden sämtliche Einträge in Ihrer crontab-Datei gelöscht. Benutzen Sie stattdessen CTRL+C (bzw. @@c).
Syntax
Format 1: | crontab[ datei] |
Format 2: | crontab -l[ benutzerkennung] |
Format 3: | crontab -r[ benutzerkennung] |
Format 4: | crontab -e[ benutzerkennung] |
Kommandoaufträge erteilen
Wenn Sie mit crontab einen Kommandoauftrag erteilen wollen, geben Sie an:
Rufen Sie crontab im obigen Format auf, dann schreibt crontab diese Angaben in Ihre crontab-Datei /var/spool/cron/crontabs/benutzerkennung. Der Prozess /usr/sbin/cron überprüft jede Minute, ob Kommandos in den jeweiligen crontab-Datei ausgeführt werden sollen, und veranlasst ggf. die Ausführung. Um kommando auszuführen, ruft crontab von Ihrem Home-Verzeichnis aus eine neue Shell (sh) auf. crontab richtet zu jeder Shell eine Standardumgebung ein, mit den Variablen HOME, LOGNAME, SHELL (/bin/sh) und PATH (:/bin:/usr/bin:/usr/lbin). Wenn Sie Ihre .profile-Datei ausführen lassen wollen, müssen Sie dies in Ihrer crontab-Datei explizit angeben. Werden in der crontab-Datei die Standard-Ausgabe und Standard-Fehlerausgabe der Kommandos nicht umgelenkt, dann erhalten Sie sowohl die Standard-Ausgabe als auch die Standard-Fehlerausgabe über mailx. Pro Benutzerkennung gibt es höchstens eine crontab-Datei. Existiert die crontab-Datei /var/spool/cron/crontabs/benutzerkennung noch nicht, so wird sie beim crontab-Aufruf neu angelegt. Existiert sie bereits, so wird sie überschrieben. Wenn Sie also mit crontab zusätzliche Kommandoaufträge erteilen wollen, dann verwenden Sie die Option -e. datei Name der Datei, die die auszuführenden Kommandos und die Zeitpunkte der Ausführung enthält. datei nicht angegeben: Erteilte Aufträge ausgeben
(l - list) Ist diese Datei nicht vorhanden, erhalten Sie eine Fehlermeldung.
Ist benutzerkennung angegeben, wird die crontab-Datei des zugehörigen Benutzers gezeigt. Die Angabe von benutzerkennung ist jedoch nur dem POSIX-Verwalter erlaubt. Erteilte Aufträge löschen
(r - remove)
Ist benutzerkennung angegeben, wird die crontab-Datei des zugehörigen Benutzers gelöscht. Die Angabe von benutzerkennung ist jedoch nur dem POSIX-Verwalter erlaubt. Erteilte Aufträge editieren
(e - edit)
Ist benutzerkennung angegeben, wird die crontab-Datei des zugehörigen Benutzers bearbeitet. Die Angabe von benutzerkennung ist jedoch nur dem POSIX-Verwalter erlaubt. |
Aufbau einer crontab-Datei
Eine crontab-Datei bzw. der Eingabetext, den Sie beim crontab-Aufruf übergeben (siehe Format 1), muss folgendermaßen aufgebaut sein: Der Text besteht
Leerzeilen sind nicht erlaubt. Zeilen mit einem KommandoauftragDie Zeilen, die einen Kommandoauftrag enthalten, bestehen jeweils aus sechs Feldern, die durch Leer- oder Tabulatorzeichen voneinander getrennt sind. Die Felder enthalten folgende Angaben:
muster kann sein:
Angabe des TagesFür die Angabe des Tages stehen zwei Felder zur Verfügung: das 3. Feld (Tag im Monat) und das 5. Feld (Wochentag). Wenn Sie das 3. Feld und zugleich das 5. Feld mit einer Zahl, einem Bereich oder einer Liste besetzen, sind beide Angaben unabhängig voneinander gültig. Zum Beispiel bewirkt der Eintrag
in der crontab-Datei, dass kommando sowohl am 1. und 15. März als auch an jedem Montag im März aufgerufen wird. Wenn Sie für die Angabe des Tages nur ein Feld besetzen wollen, müssen Sie in das andere Feld einen Stern schreiben.
in der crontab-Datei, dass kommando nur an jedem Montag im März aufgerufen wird. KommentarzeilenEine Kommentarzeile enthält in Spalte 1 das Nummernzeichen #. Darauf kann beliebiger Text folgen. Kommentarzeilen können Sie verwenden, um die Kommandoaufträge zu erläutern oder um die Aufträge zur besseren Übersicht in Abschnitte zu gliedern. Beachten Sie, dass der Eingabetext, den Sie an crontab übergeben, beliebig viele Kommentarzeilen, aber keine Leerzeilen enthalten darf. |
Fehler
Sie sind nicht berechtigt, crontab aufzurufen. Siehe Vor dem Aufruf beachten. Format 1
Sie haben crontab mit dem Namen einer Datei aufgerufen, die nicht existiert oder auf die nicht zugegriffen werden kann.
Hat eine Zeile des Eingabetextes, den Sie an crontab übergeben haben, nicht den richtigen Aufbau, dann gibt crontab diese Zeile aus, gefolgt von obiger Fehlermeldung. Anstelle der drei Punkte steht die genauere Beschreibung des Fehlers, z.B.
Ungültiges Zeichen in der Zeile gefunden
Eine angegebene Zahl liegt außerhalb der zulässigen Grenzen. Format 2
Ihre crontab-Datei /var/spool/cron/crontabs/benutzerkennung existiert nicht. Sie können sie also auch nicht mit crontab -l lesen. |
Datei
/usr/lib/cron/cron.allow Liste der Benutzerkennungen mit Ausführrecht für crontab. In jeder Zeile steht jeweils eine Benutzerkennung. /usr/lib/cron/cron.deny Liste der Benutzerkennungen ohne Ausführrecht für crontab. In jeder Zeile steht jeweils eine Benutzerkennung. /var/spool/cron/crontabs/benutzerkennung crontab-Datei des Benutzers benutzerkennung. |
Variable
Folgende Umgebungsvariablen werden von crontab benutzt: VISUAL Die Umgebungsvariable VISUAL legt bei Verwendung der Option -e fest, welcher Editor benutzt wird. EDITOR Falls VISUAL nicht gesetzt ist, legt EDITOR bei der Verwendung der Option -e fest, welcher Editor benutzt wird. |
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos crontab: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten). LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
Beispiel 1
Der Rechner soll Sie jedes Jahr am 15. Mai an den Geburtstag von Tante Emma erinnern. Dazu legen Sie eine Datei geburtstag mit folgendem Inhalt an: 0 0 15 5 * echo Tante Emma hat heute Geburtstag !!! Beachten Sie, dass Sie nur für den Tag im Monat eine Angabe machen wollen, nicht für den Wochentag. Deshalb müssen Sie in das Feld für den Wochentag einen Stern schreiben. Nun übergeben Sie Ihre crontab-Datei geburtstag:
Sie erhalten dann jeden 15. Mai um 0 Uhr die betreffende Nachricht über mailx. Das funktioniert natürlich nur dann, wenn der Rechner in dieser Nacht nicht abgeschaltet ist. |
Beispiel 2
Sie möchten eine Kollegin und sich selbst jeden Montag um 13 Uhr 30 an die Skigymnastik am Abend erinnern. Die Nachricht soll auf den Bildschirm ausgegeben werden. Sie sitzen am Bildschirm tty007, Ihre Kollegin am Bildschirm tty014. Sie können in den Eingabetext Kommentarzeilen einfügen, damit Sie ihn später mit crontab -l besser lesen können. Ihre crontab-Datei könnte dann z.B. so aussehen: # * = alle zulaessigen Werte # n-n = Bereich # n,n = Liste # Wochentag: 0 = Sonntag # # Min Std Tag(Mon) Mon Tag(Wo) Kommando # 30 13 * * 1 echo Heute abend Skigymnastik ! >/dev/tty007 30 13 * * 1 echo Heute abend Skigymnastik ! >/dev/tty014 Ihre Kollegin und Sie selbst erhalten dann jeden Montag um 13 Uhr 30 die Meldung „Heute abend Skigymnastik !“ auf den Bildschirm (und nicht in den Postkasten). |
Beispiel 3
Sie möchten der Benutzerin doro, die am Rechner brummbox arbeitet, jeden Montag mit mailx die folgende Nachricht schicken:
Dazu schreiben Sie den folgenden Eintrag in Ihre crontab-Datei: 0 0 * * 1 mailx doro@brummbox %Guten Morgen, %schoene Woche... |
Siehe auch
at, mailx, sh, vi |