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!
|