CRON(8) | System Manager's Manual | CRON(8) |
crond - Daemon zur geplanten Ausführung von Befehlen (Vixie Cron)
cron [-f] [-l] [-L Protokollierstufe]
cron wird automatisch aus /etc/init.d gestartet, sobald Mehrbenutzer-Runlevel erreicht sind.
cron durchsucht seinen Spool-Bereich (/var/spool/cron/crontabs) nach Crontab-Dateien (die nach den Benutzerkonten in /etc/passwd benannt sind). Die gefundenen Crontabs werden in den Speicher geladen. Beachten Sie, dass auf Crontabs in diesem Verzeichnis nicht direkt zugegriffen werden sollte - zum Zugriff und zur Aktualisierung sollte der Befehl crontab verwendet werden.
cron liest auch die Datei /etc/crontab, die ein etwas anderes Format hat (siehe crontab(5)). Unter Debian ist der Inhalt der Datei /etc/crontab so vordefiniert, dass Programme unter /etc/cron.hourly, /etc/ron.daily, /etc/cron.weekly und /etc/cron.monthly ausgeführt werden. Diese Konfiguration ist Debian-spezifisch; lesen Sie dazu den nachfolgenden Hinweis DEBIAN-SPEZIFISCH.
Unter Debian liest cron zusätzlich die Dateien im Verzeichnis /etc/cron.d. cron behandelt die Dateien in /etc/cron.d auf die gleiche Weise wie die Datei /etc/crontab (sie folgen dem besonderen Format dieser Datei, das heißt, sie enthalten das Feld user). Allerdings sind sie von /etc/crontab unabhängig: Sie erben beispielsweise nicht die Werte der Umgebungsvariablen. Diese Abweichung ist Debian-spezifisch; lesen Sie dazu den Hinweis DEBIAN-SPEZIFISCH unten.
Wie /etc/crontab werden die Dateien im Verzeichnis /etc/cron.d auf Änderungen überwacht. Im Allgemeinen sollte der Systemverwalter nicht /etc/cron.d/, sondern die Standarddatei des Systems /etc/crontab verwenden.
Die Datei /etc/crontab und die Dateien in /etc/cron.d müssen Root gehören und dürfen nicht für die Gruppe oder für Andere schreibbar sein. Im Gegensatz zum Spool-Bereich dürfen die Dateien unter /etc/cron.d, /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly und /etc/cron.monthly auch Symlinks sein. Das setzt allerdings voraus, dass sowohl der Symlink als auch die Datei, auf die er zeigt, Root gehören. Die Dateien unter /etc/cron.d müssen nicht ausführbar sein, während die Dateien unter /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly und /etc/cron.monthly ausführbar sein dürfen, weil sie von run-parts ausgeführt werden (siehe run-parts(8) für weitere Informationen).
cron wacht dann jede Minute auf, untersucht alle gespeicherten Crontabs und prüft jeden Befehl, um zu sehen, ob er in der aktuellen Minute ausgeführt werden sollte. Beim Ausführen von Befehlen werden alle Ausgaben per E-Mail an den Eigentümer der Crontab-Datei (oder an den Benutzer, der in der Umgebungsvariable MAILTO, falls diese existiert, genannt ist) vom Eigentümer der Crontab (oder von der E-Mail-Adresse, die in der Crontab aufgeführten Umgebungsvariable MAILFROM genannt ist, falls diese existiert) versendet. Bei den Kind-Kopien von cron, unter denen diese Prozesse ausgeführt werden, wird der Name in Großbuchstaben umgewandelt, wie in den Ausgaben von syslog und ps zu sehen ist.
Zusätzlich prüft cron jede Minute, ob sich die Änderungszeit des Spool-Verzeichnisses (oder die Änderungszeit der Datei /etc/crontab) geändert hat. Falls dem so ist, untersucht cron dann die Änderungszeit aller Crontabs und lädt jene neu, die sich geändert haben. Daher muss cron nicht immer neu gestartet werden, wenn sich eine Crontab-Datei geändert hat. Beachten Sie, dass der Befehl crontab(1) immer dann die Änderungszeit des Spool-Verzeichnisses aktualisiert, wenn es eine Crontab-Datei ändert.
Änderungen der Uhrzeit um weniger als drei Stunden müssen besonders berücksichtigt werden, zum Beispiel am Beginn oder Ende der Sommerzeit. Wenn die Uhr vorgestellt wurde, werden die Aufträge, die in der übersprungenen Zeit ausgeführt werden würden, baldmöglichst nach der Änderung ausgeführt. Umgekehrt werden bei einer Zurückstellung um weniger als drei Stunden die Aufträge, die in die wiederholte Zeitspanne fallen, nicht erneut ausgeführt.
Nur Aufträge, die zu einer bestimmten Zeit ausgeführt werden (die weder als @hourly noch als »*« in der Stunden- oder Minutenangabe angegeben sind), sind davon betroffen. Aufträge, die mit Platzhaltern angegeben sind, werden basierend auf der neuen Zeit unmittelbar ausgeführt.
Änderungen der Zeit von mehr als drei Stunden werden als Korrekturen der Uhrzeit betrachtet und die neue Zeit sofort angewendet.
cron speichert seine Aktionen in der Systemprotokolleinrichtung »cron«. Die Protokollierung kann mit dem Standardwerkzeug syslogd(8) gesteuert werden.
Falls auf Debian-Systemen in der Datei /etc/default/cron konfiguriert, können die Locale-Einstellungen für den cron-Daemon mittels /etc/environment oder /etc/default/locale verwaltet werden, wobei die Werte des Letzteren Vorrang haben. Diese Dateien werden gelesen und zum Setzen der Umgebungsvariablen LANG, LC_ALL und LC_CTYPE verwendet. Diese Variablen dienen dann zum Festlegen des Zeichensatzes für E-Mails, der standardmäßig auf »C« gesetzt ist.
Dies beeinflusst NICHT die Umgebung von Aufgaben, die unter cron ausgeführt werden. Weitere Informationen, wie Sie die Umgebung von Aufgaben anpassen können, finden Sie in crontab(5).
Der Daemon verwendet (falls vorhanden) die Definition aus /etc/timezone für die Zeitzone.
Die Umgebung kann in den Crontab-Definitionen der Benutzer neu eingerichtet werden, aber cron führt Aufgaben nur in einer einzelnen Zeitzone aus.
Debian führt einige Änderungen an cron ein, die bei den Originalautoren ursprünglich nicht verfügbar waren. Die wichtigsten Änderungen sind:
Unterstützung für /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly und /etc/cron.monthly wird unter Debian über die Standardeinstellung der Datei /etc/crontab bereitgestellt (siehe das systemweite Beispiel in crontab(5)). Die standardmäßige systemweite Crontab enthält vier Aufgaben: Ausführung jede Stunde, jeden Tag, jede Woche und jeden Monat. Jede dieser Aufgaben führt run-parts aus, wobei jedes der Verzeichnisse als Argument übergeben wird. Diese Aufgaben sind deaktiviert, falls anacron installiert ist (außer für die stündlich auszuführenden Aufgaben), um Konflikte zwischen beiden Daemons zu vermeiden.
Wie oben beschrieben, müssen die Dateien in diesen Verzeichnissen einige Plausibilitätsprüfungen durchlaufen, wie folgende: Sie müssen ausführbar sein, sie müssen Root gehören, sie dürfen von der Gruppe oder anderen nicht schreibbar sein und, falls es Symlinks sind, auf Dateien zeigen, die Root gehören. Zusätzlich müssen die Dateinamen den Erfordernissen von run-parts genügen: Sie dürfen nur aus Buchstaben, Ziffern und den speziellen Zeichen Unterstrich (»_«) und Bindestrich (»-«) bestehen. Jede Datei, die diese Voraussetzungen nicht erfüllt, wird von run-parts nicht ausgeführt. Beispielsweise werden alle Dateien ignoriert, deren Namen Punkte enthalten. Dadurch wird cron daran gehindert, Dateien auszuführen, welche die Debian-Paketverwaltung bei der Verarbeitung von Dateien in /etc/cron.d/ als Konfigurationsdateien hinterlassen hat (das heißt, Dateien mit den Endungen .dpkg-dist, .dpkg-orig und .dpkg-new).
Diese Funktionalität kann von Systemverwaltern und Paketen verwendet werden, um Aufgaben einzubeziehen, die in definierten Abständen ausgeführt werden sollen. Dateien, die von Paketen in diesen Verzeichnissen erstellt wurden, sollten nach dem Paket benannt werden, das sie dort erstellt hat.
Unterstützung für /etc/cron.d ist im cron-Daemon selbst enthalten, der diesen Ort als systemweiter Crontab-Spool behandelt. Dieses Verzeichnis kann beliebige Dateien enthalten, welche Aufgaben definieren, die dem in der Datei /etc/crontab verwendeten Format folgen. Das heißt, dass diese Dateien - im Gegensatz zum Benutzer-Spool von cron - den Benutzernamen in der Aufgabendefinition bereitstellen müssen, unter dem die Aufgaben ausgeführt werden sollen.
Dateien in diesem Verzeichnis müssen Root gehören, müssen nicht ausführbar sein (es sind Konfigurationsdateien, genau wie /etc/crontab) und müssen zur Benennungskonvention von run-parts(8) konform sein: Sie dürfen nur aus Groß- und Kleinbuchstaben, Ziffern, Unterstrichen und Bindestrichen bestehen. Das bedeutet, dass sie keine Punkte enthalten dürfen. Falls die Option -l an cron übergeben wird (die Sie in /etc/default/cron einrichten können, siehe unten), dann müssen sie der LSB-Namensraumspezifikation entsprechen, genau wie bei der Option --lsbsysinit von run-parts.
Pakete, die eine feinere Kontrolle über ihre Planung benötigen, als es in den Verzeichnissen /etc/cron.{hourly,daily,weekly,monthly} möglich ist, soll mit dieser Funktionalität ermöglicht werden, eine Crontab-Datei zu /etc/cron.d hinzuzufügen. Solche Dateien sollten nach dem Paket benannt werden, das sie dort bereitgestellt hat.
Die Standardkonfiguration von cron wird auch durch die Datei /etc/default/cron beeinflusst, welche vom init.d-Skript gelesen wird, das den cron-Daemon startet. Diese Datei bestimmt, ob cron die Umgebungsvariablen des Systems liest und es ermöglicht, vor der Ausführung von cron zusätzliche Optionen hinzuzufügen, entweder zum Einrichten von dessen Protokollierung oder um festzulegen, wie die Dateien in /etc/cron.d behandelt werden sollen.
Paul Vixie <paul@vix.com> ist der Autor von cron und der ursprüngliche Verfasser dieser Handbuchseite. Diese Handbuchseite wurde für Debian von Steve Greenland, Javier Fernandez-Sanguino und Christian Kastner angepasst.
Die deutsche Übersetzung dieser Handbuchseite wurde von Mario Blättermann <mario.blaettermann@gmail.com> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 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.
19 April 2010 | 4th Berkeley Distribution |