Gentoo Logo

Gentoo Linux Cron Guide

Inhalt:

1.  Cron Grundlagen

Was ist Cron

Cron läuft als Daemon, der Prozesse zu festgelegten Zeitpunkten startet, die mit Hilfe des crontab Befehls eingegeben werden können. Cron überprüft jede Minute ob es Cron-Jobs, die ausgeführt werden müssen, in irgendeiner der Benutzer crontabs gibt.

Notiz: crontab ist sowohl der Name einer Liste von Cron-Jobs als auch der Name des Kommandos zum Aufruf zum Editieren dieser Liste.

Cron in der Praxis

Es gibt einige Implementierungen von Cron in Portage, die man zum Einsatz im eigenen System wählen kann. Im Allgemeinen bieten alle ein ähnliches Interface, sprich die Verwendung von crontab oder eines ähnlichen Befehls. Für Systeme, die nicht 24/7 laufen (Laptop, Desktop), gibt es ein weiteres Tool, das mit Hilfe von Cron arbeitet und dafür sorgt, dass Aufgaben in vorgegebenen Intervallen ausgeführt werden - Anacron.

Es ist auch erwähnenswert, dass alle verfügbaren Cron Pakete von sys-process/cronbase abhängig sind. Zwischen diesem Paket und den Cron Paketen existiert technisch gesehen keine Abhängigkeit, aber es bietet eine cron-ähnliche Funktionalität, welche die meisten Nutzer zu schätzen wissen.

Zunächst muss man sich entscheiden welche Cron Implementierung man verwenden möchte. Folgender Überblick soll die Entscheidung erleichtern:

2.  Welcher Cron darf es sein?

Vixie Cron

Vixie Cron basiert auf SysV Cron und bietet dem Benutzer eine Vielfalt an Einstellungsmöglichkeiten. Jeder Benutzer hat seine eigene crontab und hat die Möglichkeit Umgebungsvariablen in dieser crontab festzulegen. Im Gegensatz zu anderen Cron Varianten unterstützt Vixie Cron auch SELinux und PAM. Es unterstützt weniger Architektueren als Dcron, aber mehr als Fcron.

Features von sys-process/vixie-cron:

  • Unterstützung von SELinux
  • Unterstützung von PAM /etc/security/limits.conf
  • Festlegen von Umgebungsvariablen in crontabs (PATH, SHELL, HOME, etc.)
  • Jeder Benutzer kann seine eigene crontab verwenden; der Zugriff wird durch cron.allow und cron.deny festgelegt

Dillons Cron

Dcron bietet eine einfache, elegante und sichere Implementierung von Cron. Es erlaubt keine eigenen Umgebungsvariablen in crontabs und alle Cron-Jobs werden von /bin/sh aus aufgerufen. Es bietet auch wie Vixie Cron jedem Benutzer seine eigne crontab.

Features von sys-process/dcron:

  • Schnell, einfach und frei von unnötigen Features
  • Der Zugriff auf crontab ist auf die Gruppe Cron beschränkt, d.h. es bietet keine Anbindung zu anderen Schnittstellen.

Fcron

Fcron ist eine möglicher Ersatz für Vixie Cron und Anacron. Es ist mit weiteren Features ausgestatten und dafür entwickelt, auf Systemen zu rennen, die sich nicht im Dauerbetrieb befinden. Es unterstützt das Festlegen von Startbedingungen von Jobs und bietet Kontrolle zur Serialisierung von Jobs. Außerdem gibt es einem die Möglichkeit Jobs nice-Werte zuzuweisen und auch Jobs bei Systemstart ausführen zu lassen. Weitere Informationen findet man auf fcron's home page.

Features von sys-process/fcron:

  • Entwickelt, um auf Systemen zu laufen, die sich nicht im Dauerbetrieb befinden, d.h. es kann einen Job nach einem Neustart ausführen als ob er vergessen worden wäre
  • Einstellen von Umgebungsvariablen und vielen weiteren Optionen in crontabs
  • Jeder Benutzer kann seine eigene crontab verwenden, der Zugriff ist durch cron.allow und cron.deny festgelegt
  • Verbesserte crontab Syntax mit Unterstützung von vielen neuen Features

bcron

bcron ist ein neues Cron-System, das mit besonderem Blick auf sichere Operationen entworfen wurde. Dafür ist das System in mehrere separate Programme aufgeteilt, wobei jedes für eine separate Aufgabe zuständig ist und eine strikt kontrollierte Kommunikation zwischen ihnen stattfindet. Die Benutzungsschnittstelle ist ein 1:1-Ersatz für ähnliche Systeme (z.B. vixie-cron), aber die Interna unterscheiden sich sehr. Für weitere Informationen können Sie sich die bcron-Homepage unter http://untroubled.org/bcron/ ansehen.

Features von sys-process/bcron:

  • 1:1-Ersatz für vixie-cron
  • Multi-Prozess-Design
  • Native Sommerzeitunterstützung

Anacron

Anacron ist kein Cron Daemon, sondern etwas, das für gewöhnlich in Verbindung mit eines solchen arbeitet. Es führt Befehle in festgelegten Intervallen in Tagen aus und geht nicht davon aus, dass das System 24/7 läuft. Es führt Jobs aus, die ausgelassen wurden, weil z.B. das System gerade nicht in Betrieb war. Anacron benötigt einen Cron Daemon um regelmäßig ausgeführt werden zu können.

3.  Verwendung von Cron

Installation

Wählen einer Cron Variante und sie emergen.

Befehlsauflistung 3.1: Installation von dcron

# emerge dcron
# /etc/init.d/dcron start
# rc-update add dcron default

Sollte man sich nicht für fcron entschieden haben, könnte man zusätzlich auch Anacron installieren.

Befehlsauflistung 3.2: Installation von Anacron

# emerge anacron
# /etc/init.d/anacron start
# rc-update add anacron default

System crontab

Die Hinweise nach der Installation von gewissen Cron Paketen raten an zuallererst crontab /etc/crontab auszuführen. Die Datei /etc/crontab ist die System crontab. Eine Cron Installation in Verbindung mit sys-process/cronbase verwendet sie dazu, um Skripte in /etc/cron.{daily,hourly,weekly,monthly} auszuführen. Man beachte, dass Vixie Cron neue Jobs automatisch in /etc/crontab berücksichtigt. Bei Dcron und Fcron müssen Benutzer nach jeder Änderung von /etc/crontab crontab /etc/crontab ausführen.

Beachten Sie, dass Jobs, die in der System crontab eingetragen sind, von crontab -l nicht angezeigt werden müssen.

Natürlich kann man auch ganz ohne System crontab arbeiten. Wenn man Dcron oder Fcron verwendet, reicht es crontab /etc/crontab nicht auszuführen. Falls Sie vixie-cron oder bcron wählen, sollten Sie alle Zeilen in /etc/crontab auskommentieren.

Befehlsauflistung 3.3: Auskommentieren aller Zeilen in /etc/crontab

# sed -i -e "s/^/#/" /etc/crontab

Zugriff auf Cron für andere Benutzer

Wenn Sie auch anderen Benutzer als root Zugriff auf den Cron Daemon geben wollen, sollten Sie sich folgenden Abschnitt durchlesen. Ansonsten können Sie einfach zum nächsten Abschnitt Zeitlicher Ablauf von Cron-Jobs übergehen.

Notiz: Einem Benutzer Zugriff auf die crontab zu geben, erlaubt es ihm nicht Cron-Jobs als root auszuführen. Möchte man auch Benutzern erlauben, die root crontab zu ändern, sollte man sich mit sudo auseinandersetzen. Bitte berücksichtigen Sie für weitere Einzelheiten unsere Gentoo Sudo(ers) Anleitung.

Egal welches Cron Paket man verwendet, möchte man einem Benutzer Zugriff auf die crontab geben, muss er in der Cron Gruppe sein. Wenn man z.B. den Benutzer wepy zur Cron Gruppe hinzufügen möchte:

Befehlsauflistung 3.4: Hinzufügen eines Benutzers zur Cron Gruppe

# gpasswd -a wepy cron

Notiz: Wenn Sie einen Benutzer der Cron Gruppe hinzufügen, vergewisseren Sie sich, dass sich der Benutzer ab- und wieder anmeldet, damit diese Änderung der Gruppenzugehörigkeit auch wirksam wird.

Wenn man Dcron verwendet, ist das alles, was man tun muss, um einem Benutzer Zugriff auf die crontab zu geben. Dcron Benutzer können mit dem nächsten Abschnitt Zeitlicher Ablauf von Cron Jobs fortfahren, alle anderen sollten hier weiterlesen.

Wenn man nun Fcron verwendet, muss man die Dateien /etc/fcron/fcron.deny und /etc/fcron/fcron.allow editieren. Am sichersten ist es, zuerst jedem den Zugriff in /etc/fcron/fcron.deny zu verweigern und dann einzelnen Benutzern explizit den Zugriff erlauben /etc/fcron/fcron.allow.

Wichtig: Sollten weder /etc/fcron/fcron.allow noch /etc/fcron/fcron.deny vorhanden sein, ist es allen Benutzern in der Cron Gruppe erlaubt die crontab zu verwenden. Fcron wird mit einer Standard fcron.allow, die allen Benutzern in der Cron Gruppe den Zugriff auf die fcrontab erlaubt, installiert.

Befehlsauflistung 3.5: Rechte in fcron.deny

all

Z.B. soll es dem Benutzer wepy erlaubt sein, seine eigenen Cron-Jobs zu erstellen. Dazu muss er wie folgt in /etc/fcron/fcron.allow eingetragen sein:

Befehlsauflistung 3.6: Rechte in fcron.allow

wepy

Wer nun Vixie Cron als Cron Daemon gewählt hat, braucht nur /etc/cron.allow anpassen.

Wichtig: Man sollte unbedingt beachten, dass, wenn nur /etc/cron.allow vorhanden ist, dann nur die dort aufgezählten Benutzer der Cron Gruppe Zugriff haben, aber wenn eine leere /etc/cron.deny angelegt ist, dann haben alle Benutzer der Cron Gruppe Zugriff! Also sollte es nie eine leere /etc/cron.deny geben, wenn es dazu keine /etc/cron.allow gibt.

Möchte man dem Benutzer wepy den Zugriff erlauben, fügt man ihn wie folgt zu /etc/cron.allow hinzu:

Befehlsauflistung 3.7: Rechte in /etc/cron.allow

wepy

Zeitlicher Ablauf von Cron-Jobs

Wie man nun die crontabs editiert, ist vom jeweiligen Paket abhängig, aber alle unterstützen dieselbe Menge an Basisbefehlen: Hinzufügen, Ersetzen, Editieren, Löschen und Auflisten von Cron-Jobs in crontabs. Die folgende Tabelle zeigt wie diese Befehle mit dem jeweiligen Paket auszusehen haben.

Version crontab editieren crontab löschen crontab hinzufügen cronjobs auflisten
dcron crontab -e crontab -d [Benutzer] crontab Datei crontab -l
fcron fcrontab -e fcrontab -r [Benutzer] fcrontab Datei fcrontab -l
vixie-cron & bcron crontab -e crontab -r -u [Benutzer] crontab Datei crontab -l

Notiz: Wenn man das Kommando zum Entfernen verwendent und diesem kein Argumente übergeben werden, wird die crontab vom aktuellen Benutzer gelöscht.

Notiz: Fcron hat auch einen Symlink von crontab zu fcrontab.

Bevor man nun einen dieser Befehle verwenden kann, muss man zuerst den Aufbau der crontab selbst verstehen. Jede Zeile in einer crontab muss fünf Zeitfelder in folgender Reihenfolge beinhalten: Minuten (0-59), Stunden (0-23), Tage des Monats (1-31), Monate (1-12), und Tage der Woche (0-7, Montag ist 1, Sonntag ist 0 und 7). Tage der Woche und Monate Monats können durch Abkürzungen wie mon, tue, jan, feb, u.s.w. angegenben werden. Jedes Feld kann durch einen Wertebereich (z.B. 1-5 oder mon-fri), eine durch Komma getrennte Werteliste (z.B. 1,2,3 oder mon,tue,wed) oder einen Wertebereich in Schritten (z.B. 1-6/2 anstatt 1,3,5) ersetzt werden.

Das mag anfangs etwas verwirrend aussehen, aber mit ein paar Beispielen kann man die Syntax leichter verstehen.

Befehlsauflistung 3.8: Beispiele

# Starte /bin/false jede Minute
*     *     *     *     *        /bin/false

# Starte /bin/false um 1:35 am Monatag, Dienstag, Mittwoch und am 4. jedes Monats
35    1     4     *     mon-wed  /bin/false

# Starte /bin/true um 22:25 am 2. März
25    22    2     3     *        /bin/true

# Start /bin/false um 2:00 jeden Montag, Mittwoch und Freitag
0     2     *     *     1-5/2    /bin/false

Notiz: Man beachte wie man konkrete Tage der Woche bzw. Tage des Monats bestimmt bevor sie kombiniert werden. Wenn man für einen der beiden * verwendet, dann wird der andere zuerst für die Auswertung in Betracht gezogen, wobei * in beide Felder "täglich" bedeutet.

Um auszuprobieren, was soeben erklärt wurde, erstellt man ein paar Cron Jobs. Zuerst erstellt man wie folgt eine Datei crons.cron:

Befehlsauflistung 3.9: Editieren von crons.cron

$ nano crons.cron
#Minuten  Stunden  Tage   Monate  Tage der Woche
10     3      1      1       *       /bin/echo "Ich mag Cron nicht"
30     16     *      1,2     *       /bin/echo "Ich mag Cron ein wenig"
*      *      *      1-12/2  *       /bin/echo "Ich mag Cron wirklich gerne"

Jetzt kann man diesen crontab mit dem "Hinzufügen" Befehl von der Tabelle oben zum System hinzufügen.

Befehlsauflistung 3.10: Eine neue crontab

# crontab crons.cron

Notiz: Wenn man nicht die Ausgabe dieser echo Befehle umleitet, sieht man diese Ausgabe auch nicht wirklich.

Um sicherzugehen, dass die Cron-Jobs aufgenommen wurden, verwendet man den passenden Befehl Auflisten von der Tabelle oben.

Befehlsauflistung 3.11: Auflisten der Cron-Jobs

# crontab -l

Nun sollte man eine ähnlich Liste wie in crons.cron sehen. Wenn nicht, muss wohl beim Hinzufügen ein falscher Befehl verwendet worden sein.

Diese crontab gibt jede Minute an ungeraden Monaten "Ich mag Cron wirklich gerne" aus. Offensichtlich macht man das nur, wenn man Cron wirklich mag. Die crontab wird auch "Ich mag Cron ein wenig" um 16:30 jeden Tag im Januar und Februar ausgeben. Und schließich wird sie auch "Ich mag Cron nicht" um 3:10 am 1. Januar ausgeben.

Wenn man Anacron verwendet, sollte man hier weiterlesen. Ansonsten kann man mit dem nächsten Abschnitt weitermachen Editieren von crontabs.

Benutzer die Anacron verwenden, müssen /etc/anacrontab editieren. Diese Datei hat vier Felder: Anzahl der Tage zwischen jeden Aufrufs, die Verzögerung in Minuten bis zur eigentlichen Ausführung, der Name des Jobs und der Befehl, der ausgeführt werden soll.

Wenn man z.B. möchte, dass alle fünf Tage, zehn Minuten nachdem Anacron gestartet wurde echo "Ich mag Anacron" ausgeführt werden soll, sollte dies so aussehen:

Befehlsauflistung 3.12: /etc/anacrontab

5 10 Zeitvertreib /bin/echo "Ich mag Anacron"

Anacron beendet sich, nachdem alle Jobs der anacrontab ausgeführt wurden. Soll nun Anacron täglich diese Jobs überprüfen, muss dazu Cron verwendet werden. Wie dies nun realisiert wird, ist im nächsten Abschnitt beschrieben.

Editieren von crontabs

Natürlich wird man die crontab im Alltag nicht mit Jobs belasten, die einem sagen, wie gern man Cron hat. Diese überflüssigen Jobs entfernt man mit dem dazugehörigen Befehl Löschen aus der Tabelle weiter oben. Anschließend gibt man die Cron Jobliste nochmals aus, um sicher zu gehen, dass alles funktioniert hat.

Befehlsauflistung 3.13: Löschen einer crontab

# crontab -d
# crontab -l

Jetzt sollten keine Cron-Jobs mehr in der Ausgabe von crontab -l zu sehen sein. Sollten doch noch Jobs aufgelistet werden, bedeutet das, dass das Entfernen des crontabs fehlschlug und sie sicherstellen sollten, dass Sie den korrekten Entfernen-Befehl Ihres Cron-Pakets verwendet haben.

Nun haben wir einen sauberen Zustand, und man kann etwas Nützlicheres in die root crontab eintragen. Dass der Befehl updatedb einmal pro Woche ausgeführt werden soll, damit mlocate auch korrekte Ergebnisse liefert, erscheint doch sinnvoll. Um dies der crontab hinzuzufügen, muss zuerst crons.cron wie folgt angepasst werden:

Befehlsauflistung 3.14: Eine echte crontab

22 2 * * 1    /usr/bin/updatedb

Das veranlasst Cron updatedb um 2:22 am Montag morgen wöchentlich aufzurufen. Die neue crontab muss noch mit dem Befehl Hinzufügen von der Tabelle oben eingefügt werden und die Liste der Cron-Jobs sollte auch nochmals überprüft werden.

Befehlsauflistung 3.15: Auflisten der Cron-Jobs

# crontab crons.cron
# crontab -l

Angenommen man will emerge --sync auch zur Liste der Befehle, die täglich ausgeführt werden sollen, hinzufügen. Eine Möglichkeit wäre crons.cron anzupassen und crontab crons.cron aufzurufen. Oder man erledigt das mit dem Editieren Befehl von der Tabelle oben. Dies ermöglicht, die crontab eines Benutzers direkt zu editieren ohne externe Dateien wie crons.cron anpassen zu müssen.

Befehlsauflistung 3.16: Direktes Editieren der crontab

# crontab -e

Das öffnet die crontab des Benutzers in einem Editor. emerge --sync soll jeden Tag um 6:30 ausgeführt werden, also muss das wie folgt eingetragen werden:

Befehlsauflistung 3.17: Eine echte crontab

22 2 * * 1    /usr/bin/updatedb
30 6 * * *    /usr/bin/emerge --sync
(wenn man Anacron verwendet, diese Zeile einfügen)
30 7 * * *    /usr/sbin/anacron -s

Man sollte erneut die Liste der Cron-Jobs überprüfen, wie auch im vorigen Beispiel um sicherzustellen, dass alle Jobs geplant sind. Wenn alle vorhanden sind, ist alles erledigt.

4.  cronbase verwenden

Wie bereites erwähnt wurde, hängen alle Cron-Pakete von sys-process/cronbase ab. Das cronbase-Paket erstellt /etc/cron.{hourly,daily,weekly,monthly} und ein Skript run-crons. Sie dürften auch bemerkt haben, dass /etc/crontab folgendes enthält:

Befehlsauflistung 4.1: Standard System crontab

*/15 * * * *     test -x /usr/sbin/run-crons && /usr/sbin/run-crons
0  *  * * *      rm -f /var/spool/cron/lastrun/cron.hourly
0  3  * * *      rm -f /var/spool/cron/lastrun/cron.daily
15 4  * * 6      rm -f /var/spool/cron/lastrun/cron.weekly
30 5  1 * *      rm -f /var/spool/cron/lastrun/cron.monthly

Um nicht zu weit ins Detail zu gehen, können wir einfach annehmen, dass die Kommandos ihre Skripte stündlich, täglich, wöchentlich und monatlich ausführen. Diese Methode Cron-Jobs zeitlich einzuplanen hat einige wichtige Vorteile.

  • Sie werden ausgeführt auch wenn Ihr Computer zu dem geplanten Ausführungszeitpunkt ausgeschaltet war
  • Es ist für Paketverwalter einfacher ihre Skripte an diese bekannten Stellen einzufügen
  • Sie wissen genau wo Ihre Cron-Jobs und Ihre crontab gespeichert ist, was es Ihnen auch erleichtert, diesen Teil Ihres Systems zu sichern

Notiz: Nochmals ist es wichtig zu erwähnen, dass Vixie Cron und bcron /etc/crontab automatisch auslesen, während dcron und fcron das nicht tun. Bitte lesen Sie den Abschnitt System Crontab, um mehr darüber zu erfahren.

5.  Anmerkungen

Fehlersuche

Sollte Cron nicht wie gewünscht die Jobs aufrufen, gibt es hier eine Checkliste, die man durchgehen kann.

  • Läuft Cron? Führen Sie ps ax | grep cron aus und prüfen Sie, ob es dabei ist!
  • Arbeitet Cron die Jobs ab? Folgendes ausprobieren: * * * * * /bin/echo "foobar" >> /beschreibbare_Datei, und überprüfen ob in die Datei minütlich foobar geschrieben wird.
  • Funktioniert der Befehl im Cron Job? Folgendes ausprobieren: * * * * * /bin/foobar > /beschreibbare_Datei 2>&1, nach Fehlern in der Datei /beschreibbare_Datei suchen
  • Kann Cron den Befehl ausführen? Die Protokolldatei von Cron, für gewöhnlich /var/log/cron.log oder /var/log/messages, auf Fehler überprüfen.
  • Gibt es dead.letters? Sollte es ein Problem geben, sendet Cron normalerweise eine Email. Also Emails überprüfen und - falls vorhanden - die Datei ~/dead.letter überprüfen.

Man sollte unbedingt berücksichtigen, dass sich die einzelnen Cron Pakete deutlich unterscheiden, was schon alleine die unterschiedliche Anzahl an Features der Pakete bestätigt. Es ist auch immer von Vorteil, die man pages für crontab, fcrontab oder anacrontab aufzurufen - je nach dem, was man verwendet.

Viel Glück!



Drucken

Seite aktualisiert 14. November 2010

Die Originalversion dieser Übersetzung wird nicht länger gepflegt

Zusammenfassung: Dieser Leitfaden beschreibt die Installation, Konfiguration und Verwendung von Cron.

Eric Brown
Autor

Xavier Neys
Bearbeiter

Joshua Saddler
Bearbeiter

Martin Bürger
Übersetzer

Jan Hendrik Grahl
Korrektor

Tobias Heinlein
Übersetzer

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.