CRONTAB(5) Dateiformate CRONTAB(5) BEZEICHNUNG crontab - zur Planung der Ausfuhrung von Programmen verwendete Dateien BESCHREIBUNG Eine crontab-Datei enthalt Anweisungen fur den Daemon cron(8) in folgender, vereinfachter Weise: >>fuhre diesen Befehl zu dieser Zeit an diesem Datum aus<<. Jeder Benutzer kann seine eigene Crontab definieren. Befehle in diesen ubergebenen Crontabs werden unter der Benutzerkennung des Eigentumers der jeweiligen Crontab ausgefuhrt. Uucp und News haben normalerweise ihre eigenen Crontabs, wodurch der explizite Aufruf von su(1) als Teil des Cron-Befehls vermieden wird. Leere Zeilen, vorangestellte Leerzeichen und Tabulatoren werden ignoriert. Zeilen, deren erstes Zeichen (nach moglichem Leerraum) eine Raute (#) ist, sind Kommentare und werden nicht verarbeitet. Beachten Sie, dass Kommentare nicht auf den gleichen Zeilen wie Cron-Befehle erlaubt sind, da sie als Teil des Befehls betrachtet werden. Entsprechend sind Kommentare nicht auf der gleichen Zeile wie Variablenzuweisungen der Umgebung erlaubt. 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 jeder folgende und nicht am Anfang stehende Leerraum in Wert wird als Teil des Name zugewiesenen Wertes betrachtet. Der Wert kann in einfache oder doppelte (aber zueinander passende) englische Anfuhrungszeichen eingeschlossen werden, um fuhrenden oder abschliessenden Leerraum zu erhalten. Eine Reihe von Umgebungsvariablen werden durch den cron(8)-Daemon automatisch eingerichtet. SHELL wird auf >>/bin/sh<< gesetzt und LOGNAME und HOME werden aus der /etc/passwd-Zeile des Eigentumers der Crontab gesetzt. HOME und SHELL konnen durch Einstellungen in der Crontab ausser Kraft gesetzt werden; fur >>LOGNAME<< ist dies nicht moglich. (Beachten Sie: Die Variable LOGNAME wird auf BSD-Systemen manchmal USER genannt und wird automatisch eingerichtet). Zusatzlich zu LOGNAME, HOME und SHELL pruft cron(8) auch die Variable MAILTO, falls eine E-Mail als Ergebnis der Ausfuhrung eines Befehls in einer bestimmten Crontab gesandt werden muss. Falls MAILTO definiert (und nicht leer) ist, werden E-Mails an die angegebene Adresse gesandt. Falls MAILTO definiert, aber leer ist (MAILTO=""), wird keine E-Mail gesandt. Diese Option ist nutzlich, falls Sie >>/bin/mail<< anstatt von >>/usr/lib/sendmail<< als Ihr E-Mail-Versandprogramm verwenden. Beachten Sie, dass >>/bin/mail<< keine Aliase unterstutzt und UUCP normalerweise seine E-Mail nicht liest. Falls MAILFROM definiert (und nicht leer) ist, wird es als Umschlagsendeadresse verwandt, andernfalls wird >>root<< genutzt. (Achtung: Sowohl MAILFROM als auch MAILTO werden expandiert, so dass das Setzen beider Variablen im folgenden Beispiel wie erwartet funktioniert: MAILFROM=cron-$USER@cron.com ($USER wird durch den Systembenutzer ersetzt)). Standardmassig sendet Cron eine E-Mail mit der Kopfzeile >>Content-Type:<< auf >>text/plain<< mit dem Parameter >>charset=<< auf die >>charmap/codeset<< der Locale, in der crond(8) gestartet wurde, gesetzt, d.h. entweder der Vorgabe-System-Locale, falls keine LC_*-Umgebungsvariable gesetzt sind, oder der in den LC_+-Umgebungsvariablen angegebenen Locale (siehe locale(7)). Fur das Versenden der Ausgabe von Cron-Auftragen konnen verschiedene Zeichenkodierungen durch Setzen der Variablen CONTENT_TYPE und CONTENT_TRANSFER_ENCODING in einer Crontab auf die korrekten Werte der E-Mail-Kopfzeilen gleichen Namens verwandt werden. Die Variable CRON_TZ legt die fur die Cron-Tabelle spezifische Zeitzone fest. Der Benutzer sollte in die Tabelle eine Uhrzeit entsprechend der angegebenen Zeitzone eintragen. Die fur das Schreiben in eine Protokolldatei verwandte Zeit wird von der lokalen Zeitzone ubernommen, in der der Daemon lauft. Die Umgebungsvariable MLS_LEVEL stellt Unterstutzung fur mehrfache auftragsbezogene SELinux-Sicherheitskontexte in der gleichen Crontab bereit. Standardmassig werden Cron-Auftrage in dem Vorgabe-SELinux-Kontext des Benutzers, der die Crontab-Datei erstellte, ausgefuhrt. Werden mehrfache Sicherheitsstufen und -rollen verwandt, mag dies nicht ausreichen, da der gleiche Benutzer sich in verschiedenen Rollen oder in verschiedenen Sicherheitsstufen befinden konnte. Fur weitere Informationen uber Rollen und SELinux-MLS/MCS, siehe selinux(8) und das nachfolgend in diesem Text erwahnte Beispiel. Sie konnen die Variable MLS_LEVEL auf die SELinux-Sicherheitskontextzeichenkette setzen, die den konkreten SELinux-Sicherheitskontext angibt, in dem der Auftrag ausgefuhrt werden soll. crond wird dann den Ausfuhrungskontext der Auftrage setzen, die auf die Spezifikation des konkreten Sicherheitskontextes passen. Fur weitere Informationen siehe die Option >>-s<< von crontab(1). Die Variable RANDOM_DELAY ermoglicht das Verzogern des Startens von Auftragen um eine zufallige Anzahl von Minuten, wobei die obere Grenze durch diese Variable festgelegt wird. Der zufallige Skalierungsfaktor wird durch den Cron-Daemon beim Starten ermittelt, so dass er fur die gesamte Laufzeit des Daemons konstant bleibt. Das Format eines Cron-Befehls ist dem V7-Standard ahnlich, mit einer Reihe von vorwartskompatiblen Erweiterungen. Jede Zeile hat funf Zeit-und-Datum-Felder, gefolgt von einem Benutzernamen (falls dies die system-Crontab-Datei ist), und gefolgt von einem Befehl. Befehle werden durch cron(8) ausgefuhrt, wenn die Felder >>Minute<<, >>Stunde<< und >>Monat des Jahres<< mit der aktuellen Zeit ubereinstimmen und mindestens eines der zwei >>Tag<<-Felder (>>Tag des Monats<< oder >>Tag der Woche<<) mit der aktuellen Zeit ubereinstimmt (siehe nachfolgenden >>Hinweis<<). Beachten Sie, dass nicht existierende Zeiten, wie >>fehlende Stunden<< bei der Umstellung auf Sommer-/Winterzeit, niemals ubereinstimmen werden, wodurch Auftrage, die wahrend dieser >>fehlenden Zeiten<< eingeplant waren, nicht ausgefuhrt werden. Auf ahnliche Weise werden Zeiten, die mehrfach existieren (wieder aufgrund der Sommer-/Winterzeitumstellung) dazu fuhren, dass Auftrage zweimal ausgefuhrt werden. cron(8) untersucht Cron-Eintrage einmal pro Minute. Die Zeit- und Datumsfelder sind: Feld Zulassige Werte ----- -------------- Minute 0-59 Stunde 0-23 Tag des Monats 1-31 Monat 1-12 (oder Namen, siehe unten) Wochentag 0-7 (0 oder 7 ist Sonntag, oder Namen verwenden) Ein Feld kann einen Stern (*) enthalten, der immer fur >>erster-letzter<< steht. Zahlenbereiche sind erlaubt. Bereiche sind zwei durch einen Bindestrich getrennte Zahlen. Der Bereich schliesst die angegebenen Zahlen ein. Beispielsweise legt >>8-11<< fur einen >>Stunden<<-Eintrag die Ausfuhrung zu den Stunden 8, 9, 10 und 11 fest. Die erste Zahl muss kleiner oder gleich der zweiten sein. Es ist moglich, den Ausfuhrungszeitpunkt aus einem Bereich zufallig zu wahlen. Eine Zufallszahl wird aus einem durch zwei durch eine Tilde getrennten Zahlen angegebenen Bereich ausgewahlt. Der Bereich schliesst dabei die beiden angegebenen Zahlen ein. Beispielsweise wahlt >>6~15<< fur einen >>Minuten<<-Eintrag eine zufallige Zahl von 6 bis 15. Die Zufallszahl wird ausgewahlt, wenn die Crontab ausgewertet wird. Die erste Zahl muss kleiner als oder gleich der zweiten Zahl sein. Sie konnen eine oder auch beide Zahlen weglassen, wenn Sie einen Bereich angeben. Beispielsweise wahlt >>~<< fur einen >>Minuten<<-Eintrag eine zufallige Zahl von 0 bis 59. 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 konnen Schrittwerte verwandt werden. Folgt einem Bereich eine >>/<<, so legt dies die Schrittweite durch den Bereich fest. Beispielsweise kann >>0-23/2<< im Feld >>Stunden<< verwandt werden, um festzulegen, dass der Befehl jede zweite Stunde ausgefuhrt werden soll (die Alternative im V7-Standard ist >>0,2,4,6,8,10,12,14,16,18,20,22<<). Schrittwerte sind auch nach einem Stern erlaubt, so dass Sie fur die Ausfuhrung eines Befehls alle zwei Stunden auch >>*/2<< verwenden konnen. Bitte beachten Sie, dass Schritte innerhalb des Feldes ausgewertet werden, auf das sie angewendet werden. Im Stundenfeld bedeutet beispielsweise >>*/23<<, dass der Auftrag in der Stunde 0 und der Stunde 23 innerhalb eines Kalendertages ausgefuhrt wird. In >>ANMERKUNGEN<< wird beschrieben, wie Sie das umgehen konnen. Fur die Felder >>Monat<< und >>Tag der Woche<< konnen auch Namen verwandt werden. Verwenden Sie die ersten drei Buchstaben des konkreten englischen Namens des Tages oder Monats (Gross-/Kleinschreibung ist egal). Bereiche und Liste von Namen sind erlaubt. Beispiele: >>mon,wed,fri<<, >>jan-mar<<. Falls die UID des Eigentumers 0 (root) ist, kann das erste Zeichen des Crontab-Eintrags >>-<< sein. Dies verhindert den Eintrag im Syslog fur den ausgefuhrten Befehl. Das >>sechste<< Feld (der Rest der Zeile) legt den auszufuhrenden Befehl fest. Der gesamte Befehlsanteil der Zeile bis zum Zeilenumbruch oder zum Zeichen >>%<< wird durch >>/bin/sh<< oder die durch die Variable SHELL in der Cron-Datei festgelegte Shell ausgefuhrt. Ein >>%<<-Zeichen im Befehl wird in einen Zeilenumbruch umgewandelt, ausser es wird mit einem Ruckwartsschragstrich (\) geschutzt, und samtliche Daten nach dem ersten >>%<< werden dem Befehl als Standardeingabe ubergeben. Hinweis: Der Tag der Befehlsausfuhrung kann in den folgenden zwei Feldern festgelegt werden: >>Tag des Monats<< und >>Tag der Woche<<. Falls beide Felder eingeschrankt sind (d.h. nicht das Zeichen >>*<< enthalten), wird der Befehl ausgefuhrt, wenn eines der beiden Felder auf die aktuelle Zeit passt. Beispielsweise wurde "30 4 1,15 * 5" dazu fuhren, dass ein Befehl um 16:30 Uhr am 1. und am 15. jedes Monats sowie jeden Freitag ausgefuhrt wird. Die Syntax einer Crontab-Datei kann vor der Installation mit der Option -t getestet werden. In crontab(1) finden Sie Details hierzu. BEISPIEL FUR EINE CRON-DATEI # /bin/sh verwenden, um Befehle auszufuhren, unabhangig davon, was /etc/passwd angibt SHELL=/bin/sh # samtliche Ausgaben an >>paul<< schicken, unabhangig davon, wessen Crontab dies ist MAILTO=paul # CRON_TZ=Japan # jeden Tag funf Minuten nach Mitternacht ausfuhren 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # um 14:15 Uhr am ersten Tag jedes Monats ausfuhren -- Ausgabe wird an Paul geschickt 15 14 1 * * $HOME/bin/monthly # Wochentags um 22 Uhr ausgefuhrt, Joe argern 0 22 * * 1-5 mail -s "Es ist 22 Uhr, " joe%Joe,%%Wo sind Deine Kinder?% 23 0-23/2 * * * echo "ausgefuhrt 23 Minuten nach Mitternacht, 2 Uhr, 4 Uhr, , jeden Tag" 5 4 * * sun echo "ausgefuhrt um 5 nach 4 Uhr jeden Sonntag" Auftrage in /etc/cron.d/ Die in cron.d und /etc/crontab aufgefuhrten Auftrage sind Systemauftrage, die normalerweise fur mehr als einen Benutzer verwandt werden und daher ein Benutzername benotigt wird. MAILTO in der ersten Zeile ist optional. BEISPIEL FUR EINEN AUFTRAG IN /etc/cron.d/job #als root anmelden #Auftrage mit dem bevorzugten Editor (z.B. vim) erstellen MAILTO=root * * * * * root touch /tmp/file ANMERKUNGEN Wie oben angemerkt agieren Schrittwerte nur innerhalb des Zeitraums, zu dem sie gehoren. Beispielsweise fuhrt die Angabe von >>0/35<< im Minutenfeld eines Crontab-Eintrags nicht dazu, dass der Eintrag alle 35 Minuten ausgefuhrt wird; er wird stattdessen zwei Mal pro Stunde, um 0 und 35 Minuten nach der Stunde, ausgefuhrt. Fur eine granularere Steuerung konnen Sie etwas der folgenden Art angeben: * * * * * if [ $(expr (date +s) / 60 58) = 0 ]; then echo dies wird alle 58 Minuten ausgefuhrt; fi 0 * * * * if [ $(expr (date +s) / 3600 23) = 0 ]; then echo dies wird alle 23 Stunden zur vollen Stunde ausgefuhrt; fi Passen Sie dies nach Bedarf an, falls Ihr Befehl date(1) nicht >>+%s<< als Formatzeichenkennzeichner zur Ausgabe des aktuellen UNIX-Zeitstempels akzeptiert. SELinux mit mehrstufiger Sicherheit (MLS) Es ist wichtig, dass in einer Crontab die Sicherheitsstufe mittels crontab -s oder durch Angabe der benotigten Stufe als erste Zeile in der Crontab festgelegt wird. Jede Stufe wird in /etc/selinux/targeted/seusers spezifiziert. Bei der Verwendung der Crontab im MLS-Modus ist es besonders wichtig, dass: - die tatsachliche Rolle gepruft/geandert wird, - die korrekte Rolle fur das Verzeichnis gesetzt wird, das fur die Ein-/Ausgabe verwandt wird. BEISPIEL FUR SELINUX-MLS # als root anmelden newrole -r sysadm_r mkdir /tmp/SystemHigh chcon -l SystemHigh /tmp/SystemHigh crontab -e # in Crontab-Datei schreiben MLS_LEVEL=SystemHigh 0-59 * * * * id -Z > /tmp/SystemHigh/crontest DATEIEN /etc/crontab Haupt-System-Crontab-Datei. /var/spool/cron/ ein Verzeichnis zum Speichern von durch Benutzer definierten Crontabs. /etc/cron.d/ ein Verzeichnis zum Speichern von System-Crontabs. SIEHE AUCH cron(8), crontab(1) ERWEITERUNGEN Es werden folgende, die Zeit festlegenden >>Spitznamen<< unterstutzt, die die funf anfanglichen Zeit- und Datumsfelder ersetzen und denen das Zeichen >>@<< vorangestellt ist: @reboot : Einmalig nach dem Neustart ausgefuhrt. @yearly : Einmal jahrlich ausgefuhrt, d.h. >>0 0 1 1 *<<. @annually : Einmal jahrlich ausgefuhrt, d.h. >>0 0 1 1 *<<. @monthly : Einmal monatlich ausgefuhrt, d.h. >>0 0 1 * *<<. @weekly : Einmal wochentlich ausgefuhrt, d.h. >>0 0 * * 0<<. @daily : Einmal taglich ausgefuhrt, d.h. >>0 0 * * *<<. @hourly : Einmal stundlich ausgefuhrt, d.h. >>0 * * * *<<. WARNUNGEN crontab-Dateien mussen normale Dateien oder Symlinks darauf sein, sie durfen nicht ausfuhrbar oder fur jemanden anderes als den Eigentumer schreibbar sein. Diese Anforderung kann mit der Option -p auf der Crond-Befehlszeile ausser Kraft gesetzt werden. Falls Inotify-Unterstutzung verwandt wird, werden Anderungen in den per Symlink eingebundenen Crontabs durch den Cron-Daemon nicht automatisch bemerkt. Der Cron-Daemon muss ein SIGHUP-Signal empfangen, um die Crontabs neu zu laden. Dies ist eine Einschrankung des Inotify-APIs. 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. AUTOR Paul Vixie UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Mario Blattermann und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . cronie 22. November 2012 CRONTAB(5)