Der aktuelle Linux-Kernel:
Stabil: 6.8.7
Longterm: 6.6.28
Longterm 5.x: 5.15.156
Longterm 4.x: 4.19.312
LINUX-Infopage

Was ist LINUX?
Distributionen
Impressum
Datenschutz

Informationen

Einführung
Berichte
Befehle
Begriffe

Anwendungen

Multimedia
Browser
Allgemein

News

News-Archiv



Befehle zeitgesteuert ausführen mit cron

LINUX-Infopage > Berichte: Befehle zeitgesteuert ausführen mit cron


Cron ist ein Dämon, welcher zu bestimmten Zeiten Befehle automatisch startet.

Konfiguriert wird cron systemweit über die Datei /etc/crontab. Die crontab-Dateien für jeden einzelnen Benutzer befinden sich in dem Verzeichnis /var/spool/cron/crontabs als einzelne Dateien, deren Dateiname der jedes einzelnen Benutzers ist. Die crontabs in diesem Verzeichnis sollten nicht direkt editiert, sondern mit Hilfe des Befehls crontab bearbeitet werden.

Cron wird normalerweise automatisch über die /etc/init.d-Scripts gestartet und verweilt im Arbeitsspeicher. Jede Minute wacht cron dann auf und überprüft alle gespeicherten crontabs nach Befehlen, welche in dieser Minute ausgeführt werden sollen. Sollte ein Befehl zu einer Ausgabe führen, so wird diese an den jeweiligen Benutzer als Mail verschickt, bzw. an die Adresse, welche über die MAILTO-Umgebungsvariable der crontab-Datei angegeben wurde.

Zusätzlich überprüft cron jede Minute, ob sich die Änderungszeit des Spool-Verzeichnisses (durch den crontab-Befehl) oder der /etc/crontab-Datei geändert hat. Ist dies der Fall, so wird die Änderungszeit bei allen crontabs überprüft und diejenigen neu eingelesen, welche sich verändert haben. Auf diese Weise ist es überflüssig, den cron-Dämon neuzustarten, nachdem man eine crontab-Datei verändert hat.

Wenn (wie z.B. bei der Umstellung auf Sommerzeit) die Systemuhr um weniger als 3 Stunden verstellt wird, verhält sich cron folgendermaßen:

  • wird die Systemuhr vorgestellt, so werden die Befehle, welche normalerweise in der übersprungenen Zeit ausgeführt werden sollten, kurz nach der Umstellung der Uhr ausgeführt.
  • wird die Systemuhr zurückgestellt, so werden die Befehle, welche bereits ausgeführt wurden, nicht doppelt ausgeführt.

Bei einigen Distributionen wie z.B. Debian gibt es zur Konfiguration von cron noch die folgenden Unterverzeichnisse:
/etc/cron.daily Hier befinden sich Skripts zu Programmen, welche täglich ausgeführt werden sollen.
/etc/cron.weekly Diese Skripts werden wöchentlich ausgeführt.
/etc/cron.monthly Diese werden einmal pro Monat ausgeführt.
/etc/cron.d Hier sind crontab-Fragmente gespeichert. Sie enthalten Befehle, welche zu anderen Zeiten als den oben aufgeführten gestartet werden sollen.

Die einzelnen crontab-Dateien enthalten typischerweise Anweisungen in der folgenden Form: "Führe diesen Befehl zu dieser Zeit und diesem Datum aus." Da jeder Benutzer seine eigene crontab-Datei hat, werden alle Befehle darin im Namen des jeweiligen Benutzers ausgeführt. Bei der systemweiten crontab-Datei im Verzeichnis /etc enthält jeder Eintrag zusätzlich ein Feld, in dem der Namen des Benutzers eingegeben werden kann, unter dem cron den Befehl ausführen soll.

Die crontab-Dateien enthalten für jede Zeile, die einen auszuführenden Befehl enthalten, die folgenden fünf Spalten mit Werten für Zeitangaben, sowie als letztes den Befehl, welcher ausgeführt werden soll. Einzige Ausnahme bildet die Datei /etc/crontab, welche darüberhinaus vor dem Feld für den auszuführenden Befehl noch ein Feld mit dem Namen des Benutzers enthält, unter dessen Namen der Befehl gestartet werden soll.

Feld Erlaubte Werte
Minute 0-59
Stunde 0-23
Tag des Monats 1-31
Monat 1-12 (oder Namen wie Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
Tag der Woche 0-7 (0 und 7 sind Sonntag; oder Namen wie Sun, Mon, Tue, Wed, Thu, Fri, Sat)

Wenn ein Feld ein Sternchen (*) enthält, so bedeutet dies, dass der Befehl z.B. an jedem Tag ausgeführt werden soll.

Es können auch Bereiche wie z.B. 8-11 für Stunden angegeben werden, dann wird der Befehl um 8, 9, 10 und 11 Uhr ausgeführt. Es können auch mehrere Bereiche in einer Liste eingegeben werden, z.B. so: 8-11, 15, 16.

Es gibt auch die Möglichkeit, bestimmte Werte zu überspringen. Die Angabe von 0-23/2 in der Spalte für Stunden bedeutet, dass der Befehl nur jede zweite Stunde in der Zeit von 0 bis 23 Uhr ausgeführt werden soll. Dies lässt sich auch vereinfachen, indem man */2 schreibt, wodurch der Befehl ebenfalls alle zwei Stunden ausgeführt wird.

Anstelle dieser fünf Felder kann auch einer der folgenden acht speziellen Strings stehen:

String Bedeutung
@reboot Einmal beim Starten des Computers ausführen.
@yearly Einmal im Jahr ausführen, das selbe wie "0 0 1 1 *".
@annually das selbe wie @yearly
@monthly Einmal im Monat ausführen, das selbe wie "0 0 1 * *".
@weekly Einmal pro Woche ausführen, das selbe wie "0 0 * * 0".
@daily Einmal pro Tag ausführen, das selbe wie "0 0 * * *".
@midnight das selbe wie @daily
@hourly Einmal pro Stunde ausführen, das selbe wie "0 * * * *".

Das letzte Feld enthält dann den Befehl, welcher zu dieser Zeit ausgeführt werden soll.

Damit jeder einzelne Benutzer seine crontab-Datei verändern kann, gibt es den Befehl crontab.

Crontab kann wie folgt aufgerufen werden:
Aufruf Bedeutung
crontab -e crontab des Benutzers bearbeiten; dazu wird der Standard-Editor aufgerufen, mit dem die Datei geöffnet wird. Nach dem Beenden des Editors wird die veränderte crontab automatisch installiert.
crontab -l crontab des Benutzers anzeigen
crontab -r crontab des Benutzers löschen

Fragen und Anregungen zu diesem Bericht? Schreiben Sie mir eine E-Mail!




nach oben
<< Midnight Commander | Berichte | Emacs >>
update: 25.01.2004
nach oben

Tipp


Wussten Sie schon?

Mit der Tastenkom- bination STRG-Z können Prozesse an der Linux-Konsole gestoppt werden und Sie gelangen dann zur Shell. Um den gestoppten Prozess wieder fortzusetzen, geben Sie 'fg' ein.