.\" -*- coding: UTF-8 -*- .\"/* Copyright 1988,1990,1993,1994 by Paul Vixie .\" * All rights reserved .\" * .\" * Distribute freely, except: don't remove my name from the source or .\" * documentation (don't take credit for my work), mark your changes (don't .\" * get me blamed for your possible bugs), don't alter or remove this .\" * notice. May be sold if buildable source is provided to buyer. No .\" * warrantee of any kind, express or implied, is included with this .\" * software; use at your own risk, responsibility for damages (if any) to .\" * anyone resulting from the use of this software rests entirely with the .\" * user. .\" * .\" * Send bug reports, bug fixes, enhancements, requests, flames, etc., and .\" * I'll try to keep a version up to date. I can be reached as follows: .\" * Paul Vixie uunet!decwrl!vixie!paul .\" */ .\" .\" $Id: crontab.5,v 2.4 1994/01/15 20:43:43 vixie Exp $ .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH CRONTAB 5 "19. April 2010" .UC 4 .SH BEZEICHNUNG crontab \- Tabellen zum Betrieb von Cron .SH BESCHREIBUNG Eine \fIcrontab\fP\-Datei enthält Anweisungen für den Daemon \fBcron\fP(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 \fBsu\fP(1) als Teil des Cron\-Befehls vermieden wird. .PP 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. .PP Eine aktive Zeile in einer Crontab ist entweder eine Umgebungseinstellung oder ein Cron\-Befehl. Eine Umgebungseinstellung hat die folgende Form: .PP Name = Wert .PP Dabei ist Leerraum um das Gleichheitszeichen (=) herum optional und alle folgenden und nicht am Anfang stehenden Leerraumzeichen in \fIWert\fP werden als Teil des \fIName\fP zugewiesenen Wertes betrachtet. Der \fIWert\fP 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, \fBmüssen\fP Sie Anführungszeichen verwenden. .PP Die Zeichenkette \fIWert\fP wird \fBnicht\fP auf Umgebungsersetzungen oder Ersetzungen von Variablen oder Tilde (~)\-Expansionen ausgewertet, daher werden Zeilen wie .PP .in +4n .nf PATH=$HOME/bin:$PATH PATH=~/bin:/usr/bin .fi .in .PP nicht wie erwartet funktionieren. Auch das wird nicht funktionieren: .PP .in +4n .nf A=1 B=2 C=$A $B .fi .in .PP Für die im letzten Wert definierten Variablen wird keine Ersetzung vorgenommen. Bei den meisten Shells können Sie auch z.B. folgendes versuchen: .PP P=PATH=/a/b/c:$PATH 33 22 1 2 3 eval $P && andere Befehle .PP Eine Reihe von Umgebungsvariablen werden durch den \fBcron\fP(8)\-Daemon automatisch eingerichtet. \fISHELL\fP wird auf »/usr/bin/sh« gesetzt und \fILOGNAME\fP und \fIHOME\fP werden aus der /etc/passwd\-Zeile des Eigentümers der Crontab gesetzt. \fIHOME\fP und \fISHELL\fP können durch Einstellungen in der Crontab außer Kraft gesetzt werden; für \fILOGNAME\fP ist dies nicht möglich. .PP (Ein weitere Hinweis: die Variable LOGNAME wird auf BSD\-Systemen manchmal USER genannt… auf diesen Systemen wird USER auch gesetzt.) .PP Zusätzlich zu \fILOGNAME\fP, \fIHOME\fP und \fISHELL\fP prüft \fBcron\fP(8) auch die Variable \fIMAILTO\fP, falls eine E\-Mail als Ergebnis der Ausführung eines Befehls in einer bestimmten Crontab gesendet werden muss. Falls \fIMAILTO\fP definiert (und nicht leer) ist, werden E\-Mails an die angegebene Adresse gesendet. Falls \fIMAILTO\fP definiert, aber leer ist (\fIMAILTO=""\fP), 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. Falls \fIMAILFROM\fP definiert (und nicht leer) ist, wird es als Umschlagsendeadresse verwandt, andernfalls wird »root« genutzt. .PP 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 (»\en«). Die System\-Crontab (\fI/etc/crontab\fP) 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. .PP Befehle werden durch \fBcron\fP(8) ausgeführt, wenn die Felder »Minute«, »Stunde« und »Monat des Jahres« mit der aktuellen Zeit übereinstimmen \fIund\fP mindestens eines der zwei »Tag«\-Felder (»Tag des Monats« oder »Tag der Woche«) mit der aktuellen Zeit übereinstimmt (siehe nachfolgenden »Hinweis«). \fBcron\fP(8) prüft Cron\-Einträge einmal pro Minute. Die Zeit\- und Datum\-Felder sind folgende: .IP .ta 1.5i Feld Zulässige Werte .br \-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\- .br Minute 0\-59 .br Stunde 0\-23 .br Tag des Monats 0\-31 .br Monat 0\-12 (oder Namen, siehe unten) .br Wochentag 0\-7 (0 oder 7 ist Sonntag, oder Namen verwenden) .br .PP Ein Feld kann einen Stern (*) enthalten, der immer für »erster\-letzter« steht. .PP 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. .PP Listen sind erlaubt. Eine Liste ist eine durch Kommata getrennte Gruppe von Zahlen (oder Bereichen). Beispiele: »1,2,5,9«, »0\-4,8\-12«. .PP Im Zusammenhang mit Bereichen können Schrittwerte verwandt werden. Wird an einen Bereich »/« 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«. .PP 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. .PP 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 (\e) geschützt, und sämtliche Daten nach dem ersten »%« werden dem Befehl als Standardeingabe übergeben. .PP Hinweis: Der Tag der Ausführung des Befehls kann über zwei Felder festgelegt werden \(em Tag des Monats und Tag der Woche. Falls beide Felder eingeschränkt sind (d.h. nicht mit * beginnen) wird der Befehl ausgeführt, wenn \fIeines\fP der beiden Felder auf die aktuelle Zeit passt. Beispielsweise würde .br "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). .PP Anstelle der ersten fünf Felder kann eine der folgenden acht speziellen Zeichenketten erscheinen: .IP .ta 1.5i Zeichenkette Bedeutung .br \-\-\-\-\-\- \-\-\-\-\-\-\- .br @reboot Einmal beim Systemstart ausführen. .br @yearly Einmal im Jahr ausführen, "0 0 1 1 *". .br @annually (gleichbedeutend mit @yearly) .br @monthly Einmal im Monat ausführen, "0 0 1 * *". .br @weekly Einmal in der Woche ausführen, "0 0 * * 0". .br @daily Einmal täglich ausführen, "0 0 * * *". .br @midnight (gleichbedeutend mit @daily) .br @hourly Einmal pro Stunde ausführen, "0 * * * *". .br .PP Beachten Sie, dass der Startzeitpunkt, soweit es @reboot betrifft, die Zeit ist, zu der der \fIcron\fP(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. .SH "BEISPIEL FÜR EINE CRON\-DATEI" .nf # /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 +\e%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 .fi .PP 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 \fIDISPLAY\fP korrekt gesetzt ist. .\" Note: Based on some web searches, below example might not fully .\" work in all systems, as notify-send might require also .\" to have knowledge of the dbus session in use (through the environment) .\" However, adding that code here is an overkill .nf # 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)" .fi .SH "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 \fI/etc/crontab\fP verwandt wird. .nf # /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 ) # .fi 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. .SH "EIN WEITERES BEISPIEL" In diesem Beispiel können Sie sehen, dass den Zahlen 0 vorangestellt werden kann, um die Spalten auszurichten. .nf 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 ) .fi .SH "SIEHE AUCH" \fBcron\fP(8), \fBcrontab\fP(1) .SH 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. .PP 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. .PP Bereiche können »Schritte« enthalten, daher ist »1\-9/2« identisch zu »1,3,5,7,9«. .PP Monate oder Tage der Woche können durch ihren englischen Namen angegeben werden. .PP 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. .PP 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). .PP Alle »@«\-Befehle, die anstelle der ersten fünf Felder erscheinen können, sind Erweiterungen. .SH EINSCHRÄNKUNGEN Der Daemon \fIcron\fP 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 \fITZ\fP in seiner \fIcrontab\fP 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: .nf # m h tdm mon tdw Befehl TZ=UTC 0 * * * * [ "$(date +\e%R)" = 00:00 ] && ein_Skript_ausführen .fi 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 * \fIist\fP. Diese Implementierung prüft aber nur, ob das \fIerste Zeichen\fP 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 \fIcrontab\fP 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 \fIcrontab\fP formuliert werden kann, ist der beste Ansatz, die Überprüfung des Dateums 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 \fBncal\fP(1) oder \fBcalendar\fP(1). Um beispielsweise am letzten Samstag jedes Monats ein Programm auszuführen, könnten Sie folgenden Wrapper\-Code verwenden: .nf 0 4 * * Sat [ "$(date +\e%e)" = "$(LANG=de ncal | sed \-n 's/^Sa .* \e([0\-9]\e+\e) *$/\e1/p')" ] && echo "Letzter Samstag" && auszuführendes_Programm .fi .SH "VERWENDUNG VON EVAL ZUM EINHÜLLEN VERSCHIEDENER UMGEBUNGSEINSTELLUNGEN" Der folgende Tipp wurde freundlicherweise von 積丹尼 Dan Jacobson bereitgestellt: .PP 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 .PP ohne Eval geht es nicht. Mittels d=LANG=zh_TW.UTF\-8 w3m \-dump gibt es folgendes: /bin/sh: LANG=zh_TW.UTF\-8: Kommando nicht gefunden. .SH 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. .SH AUTOR Paul Vixie ist der Autor von \fIcron\fP und der ursprüngliche Verfasser dieser Handbuchseite. Diese Handbuchseite wurde für Debian von Steve Greenland, Javier Fernandez\-Sanguino, Christian Kastner, Christian Pekeler und Georges Khaznadar angepasst. .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Mario Blättermann und Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .