oracular (5) crontab.5.gz

Provided by: manpages-de_4.23.1-1_all bug

BEZEICHNUNG

       crontab - Tabellen zum Betrieb von Cron

BESCHREIBUNG

       Eine crontab-Datei enthält Anweisungen für den Daemon cron(8) in der algemeinen Weise: »führe diesen
       Befehl zu dieser Zeit an diesem Datum aus«. Jeder Benutzer hat seine eigene Crontab. Befehle in diesen
       übergebenen Crontabs werden unter der Benutzerkennung des Eigentümers der jeweiligen Crontab ausgeführt.
       Uucp und News werden normalerweise ihre eigenen Crontabs haben, wodurch der explizite Aufruf von su(1)
       als Teil des Cron-Befehls vermieden wird.

       Beachten Sie, dass Kommentare auf der gleichen Zeile wie Cron-Befehle nicht als Kommentare im Sinne von
       Cron behandelt werden, sondern als Teil des Befehls betrachtet und an die Shell übergeben werden. Dies
       trifft ähnlich für Kommentare auf der gleichen Zeile wie Variableneinstellungen zu.

       Eine aktive Zeile in einer Crontab ist entweder eine Umgebungseinstellung oder ein Cron-Befehl. Eine
       Umgebungseinstellung hat die folgende Form:

           Name = Wert

       Dabei ist Leerraum um das Gleichheitszeichen (=) herum optional und alle folgenden und nicht am Anfang
       stehenden Leerraumzeichen in Wert werden als Teil des Name zugewiesenen Wertes betrachtet. Der Wert kann
       in einfache oder doppelte (aber zueinander passende) englische Anführungszeichen eingeschlossen werden,
       um führenden oder abschließenden Leerraum zu erhalten. Um eine leere Variable zu definieren, können Sie
       Anführungszeichen verwenden.

       Die Zeichenkette Wert wird nicht auf Umgebungsersetzungen oder Ersetzungen von Variablen oder Tilde
       (~)-Expansionen ausgewertet, daher werden Zeilen wie

           PATH=$HOME/bin:$PATH
           PATH=~/bin:/usr/bin

       nicht wie erwartet funktionieren. Auch das wird nicht funktionieren:

           A=1
           B=2
           C=$A $B

       Für die im letzten Wert definierten Variablen wird keine Ersetzung vorgenommen. Bei den meisten Shells
       können Sie auch z.B. folgendes versuchen:

           P=PATH=/a/b/c:$PATH
           33 22 1 2 3 eval $P && andere Befehle

       Eine Reihe von Umgebungsvariablen werden durch den cron(8)-Daemon automatisch eingerichtet. SHELL wird
       auf /usr/bin/sh gesetzt und LOGNAME und HOME werden aus der /etc/passwd-Zeile des Eigentümers der Crontab
       gesetzt. HOME und SHELL können durch Einstellungen in der Crontab außer Kraft gesetzt werden; für LOGNAME
       ist dies nicht möglich.

       (Ein weitere Hinweis: die Variable LOGNAME wird auf BSD-Systemen manchmal USER genannt… auf diesen
       Systemen wird USER auch gesetzt.)

       Zusätzlich zu LOGNAME, HOME und SHELL prüft cron(8) auch die Variable MAILTO, falls eine E-Mail als
       Ergebnis der Ausführung eines Befehls in einer bestimmten Crontab gesendet werden muss. Falls MAILTO
       definiert (und nicht leer) ist, werden E-Mails an die angegebene Adresse gesendet. Falls MAILTO
       definiert, aber leer ist (MAILTO=""), wird keine E-Mail gesendet. Diese Option ist nützlich, falls Sie
       /usr/bin/mail anstatt von /usr/lib/sendmail als Ihr E-Mail-Versandprogramm verwenden. Beachten Sie, dass
       /usr/bin/mail keine Aliase unterstützt und UUCP normalerweise seine E-Mail nicht liest.

       Das Format eines Cron-Befehls ist dem V7-Standard sehr ähnlich, mit einer Reihe von aufwärtskompatiblen
       Erweiterungen. Jede Zeile hat fünf Zeit-und-Datum-Felder, gefolgt von Befehl, gefolgt von einem
       Zeilenumbruchzeichen (»\n«). Die System-Crontab (/etc/crontab) verwendet das gleiche Format, außer dass
       der Benutzername für den Befehl nach den Zeit- und Datumsfeldern und vor dem Befehl festgelegt wird. Die
       Felder können durch Leerzeichen und Tabulatoren getrennt werden. Die maximal erlaubte Länge für das
       Befehlsfeld ist 998 Zeichen.

       Befehle werden durch cron(8) ausgeführt, wenn die Felder »Minute«, »Stunde« und »Monat des Jahres« mit
       der aktuellen Zeit übereinstimmen und mindestens eines der zwei »Tag«-Felder (»Tag des Monats« oder »Tag
       der Woche«) mit der aktuellen Zeit übereinstimmt (siehe nachfolgenden »Hinweis«). cron(8) prüft
       Cron-Einträge einmal pro Minute. Die Zeit- und Datum-Felder sind folgende:

       ┌───────────────┬───────────────────────────────────────┐
       │Feldzulässige Werte                       │
       ├───────────────┼───────────────────────────────────────┤
       │ Minute        │ 0-59                                  │
       ├───────────────┼───────────────────────────────────────┤
       │Stunde         │ 0-23                                  │
       ├───────────────┼───────────────────────────────────────┤
       │Tag des Monats │ 0-31                                  │
       ├───────────────┼───────────────────────────────────────┤
       │Monat          │ 0-12 (oder Namen, siehe unten)        │
       ├───────────────┼───────────────────────────────────────┤
       │Wochentag      │ 0-7 (0 oder 7 ist Sonntag, oder Namen │
       │               │ verwenden)                            │
       └───────────────┴───────────────────────────────────────┘

       Ein Feld kann einen Stern (*) enthalten, der immer für »erster-letzter« steht.

       Zahlenbereiche sind erlaubt. Bereiche sind zwei durch einen Bindestrich getrennte Zahlen. Der Bereich
       schließt die angegebenen Zahlen ein. Beispielsweise legt »8-11« für einen »Stunden«-Eintrag die
       Ausführung zu den Stunden 8, 9, 10 und 11 fest.

       Listen sind erlaubt. Eine Liste ist eine durch Kommata getrennte Gruppe von Zahlen (oder Bereichen).
       Beispiele: »1,2,5,9«, »0-4,8-12«.

       Im Zusammenhang mit Bereichen können Schrittwerte verwandt werden. Wird an einen Bereich »/<Zahl>«
       angehängt, dann legt dies den numerischen Wert für die Schritte durch den Bereich fest. Beispielsweise
       kann »0-23/2« im Stunden-Feld verwandt werden, um die Ausführung zu jeder zweiten Stunde festzulegen (die
       Alternative im V7-Standard ist »0,2,4,6,8,10,12,14,16,18,20,22«). Schritte sind auch nach einem Stern
       erlaubt, falls Sie also »alle zwei Stunden« festlegen möchten, verwenden Sie einfach »*/2«.

       Für die Felder »Monat« und »Tag der Woche« können auch englische Namen verwandt werden. Verwenden Sie die
       ersten drei (englischen) Buchstaben des bestimmten Tages oder Monats (Groß-/Kleinschreibung ist egal).
       Bereiche oder Listen von Namen sind nicht erlaubt.

       Das »sechste« Feld (der Rest der Zeile) legt den auszuführenden Befehl fest. Der gesamte Befehlsanteil
       der Zeile bis zum Zeilenumbruch oder zum Zeichen »%« wird durch /usr/bin/sh oder die durch die Variable
       SHELL in der Cron-Datei festgelegte Shell ausgeführt. Ein »%«-Zeichen im Befehl wird in einen
       Zeilenumbruch umgewandelt, außer es wird mit einem Rückwärtsschrägstrich (\) geschützt, und sämtliche
       Daten nach dem ersten »%« werden dem Befehl als Standardeingabe übergeben.

       Beachten Sie: Die Ausführung des Tagesbefehls kann durch zwei Felder festgelegt werden: Tag des Monats
       und Tag der Woche. Falls beide Felder eingeschränkt sind (d.h. nicht »*« sind), wird der Befehl
       ausgeführt, wenn einer der beiden Felder auf die aktuelle Zeit passt. Beispielsweise würde »30 4 1,15 *
       5« dazu führen, dass ein Befehl um 16:30 Uhr am 1. und am 15. jedes Monats sowie jeden Freitag ausgeführt
       wird. Sie können jedoch das gewünschte Ergebnis auch erreichen, indem Sie einen Test zum Befehl
       hinzufügen (siehe das letzte Beispiel in BEISPIEL FÜR EINE CRON-DATEI nachfolgend).

       Anstelle der ersten fünf Felder kann eine der folgenden acht speziellen Zeichenketten erscheinen:

       ┌─────────────┬───────────────────────────────────────┐
       │ZeichenketteBedeutung                             │
       ├─────────────┼───────────────────────────────────────┤
       │@reboot      │ Einmal beim Systemstart ausführen.    │
       ├─────────────┼───────────────────────────────────────┤
       │@yearly      │ Einmal im Jahr ausführen, »0 0 1 1    │
       │             │ *«.                                   │
       ├─────────────┼───────────────────────────────────────┤
       │@annually    │ (gleichbedeutend zu @yearly)          │
       ├─────────────┼───────────────────────────────────────┤
       │@monthly     │ Einmal im Monat ausführen, »0 0 1 *   │
       │             │ *«.                                   │
       ├─────────────┼───────────────────────────────────────┤
       │@weekly      │ Einmal in der Woche ausführen, »0 0 * │
       │             │ * 0«.                                 │
       ├─────────────┼───────────────────────────────────────┤
       │@daily       │ Einmal täglich ausführen, »0 0 * *    │
       │             │ *«.                                   │
       ├─────────────┼───────────────────────────────────────┤
       │@midnight    │ (gleichbedeutend zu @daily)           │
       ├─────────────┼───────────────────────────────────────┤
       │@hourly      │ Einmal pro Stunde ausführen, »0 * * * │
       │             │ *«.                                   │
       └─────────────┴───────────────────────────────────────┘

       Beachten Sie, dass der Startzeitpunkt, soweit es @reboot betrifft, die Zeit ist, zu der der
       cron(8)-Daemon gestartet wurde. Insbesondere könnte dies früher sein, als der Start von einigen
       System-Daemons oder anderen Einrichtungen. Dies erfolgt aufgrund der Systemstartreihenfolgesequenz der
       Maschine.

BEISPIEL FÜR EINE CRON-DATEI

           # /usr/bin/sh verwenden, um Befehle auszuführen, unabhängig davon, was /etc/passwd angibt
           SHELL=/usr/bin/sh
           # sämtliche Ausgaben an »paul« schicken, unabhängig davon, wessen Crontab dies ist
           MAILTO=paul
           # jeden Tag fünf Minuten nach Mitternacht ausführen
           5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
           # um 14:15 Uhr am ersten Tag jedes Monats ausführen -- Ausgabe wird an Paul geschickt
           15 14 1 * *     $HOME/bin/monthly
           # Wochentags um 22 Uhr ausgeführt, Joe ärgern
           0 22 * * 1-5    mail -s "Es ist 22 Uhr, " joe%Joe,%%Wo sind Deine Kinder?%
           23 0-23/2 * * * echo "ausgeführt 23 Minuten nach Mitternacht, 2 Uhr, 4 Uhr, …, jeden Tag"
           5 4 * * sun     echo "ausgeführt um 5 nach 4 Uhr jeden Sonntag"
           0 */4 1 * mon   echo "ausgeführt jede 4. Stunde am 1. und an jedem Montag"
           0 0 */2 * sun   echo "ausgeführt um Mitternacht an jedem Sonntag der ein ungerades Datum hat"
           # Ausgeführt an jedem zweiten Samstag des Monats
           0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2. Samstag"
           # Gleiche Sache, sogar effizient:
           0 4 * * * Sat   d=$(date +e) && test $d -ge 8 -a $d -le 14 && echo "2. Samstag"
           #Ausgeführt früh an dem nächsten Morgen, der dem ersten
           #Donnerstag des Monats folgt
           57 2 * * 5 case $(date +d) in 0[2-8]) echo "Nach dem 1. Donnerstag"; esac

       Alle der vorstehenden Beispiele führen nicht-interaktive Programme aus. Sollten Sie ein Programm
       ausführen wollen, das mit der Arbeitsumgebung des Benutzers interagiert, dann müssen Sie sicherstellen,
       dass die Umgebungsvariable DISPLAY korrekt gesetzt ist.

           # Jeden Tag um 10:00 Uhr ein Programm und eine Benachrichtigung ausführe
           0 10 * * *  $HOME/bin/program | DISPLAY=:0 notify-send "Programm ausgeführt" "$(cat)"

BEISPIEL FÜR EINE SYSTEM-CRON-DATEI

       Nachfolgendes führt den Inhalt einer regulären, systemweiten Crontab-Datei auf. Anders als bei Crontabs
       von Benutzern enthält diese Datei das Benutzernamenfeld, wie es von /etc/crontab verwandt wird.

           # /etc/crontab: systemweite Crontab
           # Anders als bei anderen Crontabs müssen Sie nicht den Befehl
           # »crontab« ausführen, um die neue Version nach der Beabeitung
           # dieser Datei und Dateien in /etc/cron.d zu installieren. Diese
           # Dateien enthalten auch Benutzernamenfelder, was keine anderen
           # Crontabs machen.

           SHELL=/bin/sh
           PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

           # Beispiel einer Auftragsdefinition:
           # .---------------- Minute (0 - 59)
           # |  .------------- Stunde (0 - 23)
           # |  |  .---------- Tag des Monats (1 - 31)
           # |  |  |  .------- Monat (1 - 12) ODER jan,feb,mar,apr …
           # |  |  |  |  .---- Wochentag (0 - 6) (Sonntag=0 oder 7) ODER sun,mon,tue,wed,thu,fri,sat
           # m h tdm mon tdw Ben    Befehl
           17 * * * *  root  cd / && run-parts --report /etc/cron.hourly
           25 6 * * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
           47 6 * * 7  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
           52 6 1 * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
           #

       Beachten Sie, dass alle systemweiten Aufträge standardmäßig von 6 bis 7 Uhr ausgeführt werden. Bei
       Systemen, die während dieser Zeitdauer nicht eingeschaltet sind, werden nur die stündlichen Aufgaben
       ausgeführt, außer die obigen Vorgaben wurden geändert.

EIN WEITERES BEISPIEL

       In diesem Beispiel können Sie sehen, dass den Zahlen 0 vorangestellt werden kann, um die Spalten
       auszurichten.

           17  * * * *  root  cd / && run-parts --report /etc/cron.hourly
           25 16 * * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
           47 06 * * 7  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
           52 06 1 * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

SIEHE AUCH

       cron(8), crontab(1)

ERWEITERUNGEN

       Bei der Angabe des Tages der Woche werden sowohl Tag 0 als auch Tag 7 als Sonntag betrachtet. BSD und
       AT&T scheinen sich darüber uneinig zu sein.

       Listen und Bereiche können im gleichen Feld simultan existieren. »1-3,7-9« würde von AT&T- und BSD-Cron
       abgelehnt – sie würden NUR »1-3« oder »7,8,9« sehen wollen.

       Bereiche können »Schritte« enthalten, daher ist »1-9/2« identisch zu »1,3,5,7,9«.

       Monate oder Tage der Woche können durch ihren englischen Namen angegeben werden.

       In der Crontab können Umgebungsvariablen gesetzt werden. In BSD und AT&T ist die an Kindprozesse
       übergebene Umgebung im Prinzip die von /etc/rc.

       Die Ausgabe von Befehlen wird an den Eigentümer der Crontab per E-Mail gesandt (BSD kann dies nicht),
       kann an eine vom Eigentümer verschiedene Person per E-Mail gesandt werden (SysV kann dies nicht) oder
       diese Funktionalität kann ausgeschaltet werden und es wird überhaupt keine E-Mail gesandt (SysV kann dies
       auch nicht).

       Alle »@«-Befehle, die anstelle der ersten fünf Felder erscheinen können, sind Erweiterungen.

EINSCHRÄNKUNGEN

       Der Daemon cron läuft innerhalb einer definierten Zeitzone. Derzeit werden keine benutzerbezogenen
       Zeitzonen unterstützt. Sämtlich Aufgaben, die des Systems und der Benutzer, werden basierend auf der
       konfigurierten Zeitzone ausgeführt. Selbst wenn ein Benutzer die Umgebungsvariable TZ in seiner Crontab
       festlegt, wird dies nur die in seiner Crontab ausgeführten Befehle betreffen, nicht die Ausführung der
       Crontab-Aufgaben selbst. Falls eine bestimmte Zeitzone für Crontab-Aufgaben selbst festgelegt werden
       soll, muss händisch das Datum in dem Kindskript überprüft werden, beispielsweise:

           # m h  tdm mon tdw   Befehl

           TZ=UTC
           0 * * * * [ "$(date +\%R)" = 00:00 ] && ein_Skript_ausführen

       POSIX spezifiziert, dass die Felder »Tag des Monats« und »Tag der Woche« beide auf die aktuelle Zeit
       passen müssen, wenn einer von ihnen ein * ist. Diese Implementierung prüft aber nur, ob das erste Zeichen
       ein * ist. Daher wird »0 0 */2 * sun« jeden Sonntag ausgeführt, der auf einem ungeraden Datum liegt,
       während der POSIX-Standard verlangen würde, dass er jeden Sonntag und auf jedem ungeradem Datum
       ausgeführt wird.

       Die Syntax von crontab(5) ermöglicht es nicht, alle denkbaren Perioden zu definieren. Beispielsweise kann
       nicht direkt der letzte Wochentag eines Monats definiert werden. Um eine Aufgabe in einer Zeitperiode
       auszuführen, die nicht in der Syntax von crontab(5) formuliert werden kann, ist der beste Ansatz, die
       Überprüfung des Datums und der Zeitinformation durch das ausgeführte Programm selbst durchführen zu
       lassen und mit der Ausführung nur fortzufahren, falls die Periode auf die gewünschte Periode passt.

       Falls das Programm die Prüfungen nicht selbst ausführen kann, dann ist ein Wrapper-Skript erforderlich.
       Hilfreiche Werkzeuge, die für die Datumsanalyse verwendet werden können, sind ncal(1) oder calendar(1).
       Um beispielsweise am letzten Samstag jedes Monats ein Programm auszuführen, könnten Sie folgenden
       Wrapper-Code verwenden:

           0 4 * * Sat   [ "$(date +\%e)" = "$(LANG=de ncal | sed -n 's/^Sa .* \([0-9]\+\) *$/\1/p')" ] && echo "Letzter Samstag" && auszuführendes_Programm

VERWENDUNG VON EVAL ZUM EINHÜLLEN VERSCHIEDENER UMGEBUNGSEINSTELLUNGEN

       Der folgende Tipp wurde freundlicherweise von 積丹尼 Dan Jacobson bereitgestellt:

           CONTENT_TYPE="text/plain; charset=UTF-8"
           d=eval LANG=zh_TW.UTF-8 w3m -dump
           26 22 16 1-12 * $d https://www.ptt.cc/bbs/transgender/index.html

       Würde nicht ohne das »eval« funktionieren. Der Ausdruck

           d=LANG=zh_TW.UTF-8 w3m -dump

       würde folgendes hervorrufen:

           /bin/sh: LANG=zh_TW.UTF-8: Kommando nicht gefunden.

DIAGNOSE

       Cron verlangt, dass jeder Eintrag in einer Crontab mit einem Zeilenumbruchzeichen endet. Falls dem
       letzten Eintrag ein Zeilenumbruch fehlt (d.h. sie mit EOF beendet ist), wird Cron die Crontab als
       (zumindestens teilweise) defekt betrachten. Es wird eine Warnung ins Systemprotokoll geschrieben.

AUTOREN

       Paul Vixie <paul@vix.com>
           Schrieb diese Handbuchseite (1994).

       Steve Greenland <stevegr@debian.org>
           Betreute das Paket (1996-2005).

       Javier Fernández-Sanguino Peña <jfs@debian.org>
           Betreute das Paket (2005-2014).

       Christian Kastner <ckk@debian.org>
           Betreute das Paket (2010-2016).

       Georges Khaznadar <georgesk@debian.org>
           Betreute das Paket (2022-2024).

       Copyright © 1994 Paul Vixie

       Darf frei verteilt werden, außer dass mein Name nicht aus den Quellen oder der Dokumentation entfernt
       werden darf (d.h. Sie keine Anerkennung für meine Arbeit bekommen), Sie Ihre Änderungen markieren (d.h.
       mir nicht mögliche Fehler von Ihnen vorgeworfen werden), Sie nicht diesen Hinweis ändern oder entfernen.
       Sie dürfen es verkaufen, wenn Sie dem Käufer die baufähigen Quellen bereitstellen. Mit dieser Software
       ist keinerlei Haftung irgendwelcher Art, weder ausdrücklich noch implizit, verbunden; Benutzung auf
       eigenes Risiko, die Verantwortung für Schäden (falls vorhanden) bei irgendjemandem durch die Verwendung
       dieser Software liegt ausschließlich beim Benutzer.

       Seit 1994 wurden an dieser Handbuchseite viele Veränderungen durch die Debian-Entwickler, die Cron
       betreuten, vorgenommen. Oben finden Sie eine kurze Liste, weitere Informationen finden Sie in der Datei
       /usr/share/doc/cron/copyright.

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von Mario Blättermann <mario.blaettermann@gmail.com>
       und Helge Kreutzmann <debian@helgefjell.de> erstellt.

       Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE
       HAFTUNG übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die
       Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.