Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

crontab - Kommandos regelmäßig zu bestimmten Zeitpunkten ausführen

&pagelevel(4)&pagelevel

(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
Format 1:crontab[ datei]


Wenn Sie mit crontab einen Kommandoauftrag erteilen wollen, geben Sie an:

  • das Kommando (bzw. die Shell-Prozedur/das Programm), das ausgeführt werden soll,

  • den Zeitpunkt, zu dem das Kommando ausgeführt werden soll (z.B. jeden Freitag oder jeden 15. Januar).

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 muss dem unten beschriebenen Aufbau entsprechen (siehe Aufbau einer crontab-Datei).

datei nicht angegeben:
crontab liest den Eingabetext von der Standard-Eingabe. Der Text, den Sie in diesem Fall eingeben, muss dem unten beschriebenen Aufbau entsprechen (siehe "Aufbau einer crontab-Datei").


Erteilte Aufträge ausgeben
Format 2:crontab -l[ benutzerkennung]


-l

(l - list)
crontab gibt den Inhalt Ihrer crontab-Datei /var/spool/cron/crontabs/benutzerkennung aus.

Ist diese Datei nicht vorhanden, erhalten Sie eine Fehlermeldung.

benutzerkennung

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
Format 3:crontab -r[ benutzerkennung]


-r

(r - remove)
crontab löscht Ihre crontab-Datei /var/spool/cron/crontabs/benutzerkennung.

benutzerkennung

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
Format 4:crontab -e[ benutzerkennung]


-e

(e - edit)
Mit dieser Option können Sie eine Kopie Ihrer crontab-Datei oder, falls diese nicht existiert, eine leere Datei editieren und als aktuelle crontab-Datei speichern. Die Umgebungsvariable VISUAL legt fest, welcher Editor aufgerufen wird. Ist VISUAL nicht definiert, so wird die Umgebungsvariable EDITOR überprüft. Ist auch EDITOR nicht definiert, so wird ed aufgerufen.

benutzerkennung

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

  • aus Zeilen, die einen Kommandoauftrag enthalten

  • evt. aus Kommentarzeilen.

Leerzeilen sind nicht erlaubt.

Zeilen mit einem Kommandoauftrag

Die Zeilen, die einen Kommandoauftrag enthalten, bestehen jeweils aus sechs Feldern, die durch Leer- oder Tabulatorzeichen voneinander getrennt sind. Die Felder enthalten folgende Angaben:

123456
MinuteStundeTag im MonatMonatWochentagKommando


Die Felder 1 bis 5 legen die Zeitpunkte fest, zu denen das in Feld 6 angegebene Kommando ausgeführt werden soll.




MinuteMögliche Angaben: 0-59 oder muster
StundeMögliche Angaben: 0-23 oder muster
Tag im MonatMögliche Angaben: 1-31 oder muster
MonatMögliche Angaben: 1-12 oder muster
WochentagMögliche Angaben: 0-6 (0=Sonntag) oder muster

Kommando

Name des Kommandos, das zu dem angegebenen Zeitpunkt ausgeführt werden soll.
Mit Hilfe des Prozentzeichens % stellen Sie dem Kommando die Standard-Eingabe zur Verfügung. Die Shell interpretiert jedes Prozentzeichen im Kommandofeld, das nicht durch einen Gegenschrägstrich \ entwertet ist, als Neue-Zeile-Zeichen. Sie führt den Inhalt des Kommandofeldes nur bis zum ersten nicht entwerteten Prozentzeichen oder Neue-Zeile-Zeichen aus; der Rest des Feldes wird dem Kommando als Standard-Eingabe übergeben (siehe Beispiel 3).

muster kann sein:
  • ein Stern * (steht für alle zulässigen Werte)

  • ein Bereich zahl-zahl

  • eine Liste von zulässigen Zahlen oder Bereichen; die Elemente der Liste sind durch Kommas getrennt.
    Beispiel: 1,3,5 oder 1-3,5

Angabe des Tages

Fü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

0 0 1,15 3 1 kommando

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.
Zum Beispiel bewirkt der Eintrag

0 0 * 3 1 kommando

in der crontab-Datei, dass kommando nur an jedem Montag im März aufgerufen wird.

Kommentarzeilen

Eine 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

crontab: you are not authorized to use cron. Sorry.

Sie sind nicht berechtigt, crontab aufzurufen. Siehe Vor dem Aufruf beachten.


Format 1

crontab: can't open your crontab file.

Sie haben crontab mit dem Namen einer Datei aufgerufen, die nicht existiert oder auf die nicht zugegriffen werden kann.


crontab: error in previous line; ...

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.

unexpected character found in line

Ungültiges Zeichen in der Zeile gefunden

number out of bounds

Eine angegebene Zahl liegt außerhalb der zulässigen Grenzen.


Format 2

crontab: can't open your crontab file.

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:

$ crontab 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:

Guten Morgen,

schoene Woche...

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