Cronjobs mit crontab verwalten


crontab erstellt und verwaltet cron-Tabellen

Syntax: crontab [-Option] <Datei> ...

Beschreibung:


crontab dient der Verwaltung von cron-Tabellen, den Anwenderschnittstellen zum cron-Dämon. cron wird für das regelmäßige Ausführen bestimmter - mittels crontab - erstellter Arbeitslisten eingesetzt.

crontab hat im Wesentlichen drei Aufgaben:
  • Es zeigt die aktuelle cron-Tabelle an,
  • erlaubt deren Editieren
  • und wird zum Löschen verwendet.

Für den Systemverwalter ermöglicht crontab den einfachen Zugriff auf bestimmte interne cron-Tabellen, z.B. updatedb.


Aufbau der cron-Tabellen:


cron-Tabellen bestehen aus beliebig vielen Zeilen. Kommentare werden durch # in Spalte eins eingeleitet. Sie gelten bis zum Zeilenende. Leerzeilen werden ignoriert.

Nach der Deklaration lokaler Variablen folgt die eigentliche Tabelle. Diese besteht aus sieben Spalten pro Zeile. Die ersten fünf Spalten spezifizieren den Ausfügrungszeitpunkt. Die sechte Spalte enthält den Namen des Users, unter dessen Account der Dienst ausgeführt wird. Der Rest wird als siebte Spalte interpretiert und enthält die auszuführenden Befehle.


Die Terminfelder:


Das erste Feld beinhaltet die Minute, das zweite die Stunde, das dritte den Tag, das vierte den Monat.
dow (day of the week) steht für den Wochentag.

Innerhalb der Terminfelder können die Angaben als Zahlen (im Feld month und dow auch über die englischen Namen) erfolgen. Mehrere Einzeleinträge sind möglich. Sie werden durch Kommata getrennt. Auch Bereiche können angegeben werden. 2,3,4,6 kann auch als 2-4,6 angegeben werden. Das *-Zeichen wird als Joker eingesetzt, das den Bereich ersetzen kann (<erstes Element>-<letztes Element>). Die Felder werden durch mindestens ein Leerzeichen oder TAB voneinander getrennt.

Zusätzlich sind noch Zeitschritte (steps) erlaubt: Die Angabe eines /-Zeichens, gefolgt von einer Zahl, bezeichnet eine schrittweise Angabe: */2 bedeutet jeden zweiten Wert, im Feld month also 2,4,6,8,10,12 , im Feld dow entsprechend TU,TH,SA (Di,Do,Sa). 35-49/3 liefert z.B. 35,38,41,44,47.

Beispielaufbau der cron-Tabelle:

# (Cron version -- $ID: ... 1.5 2000/05/27 12:05:33 work Exp $)
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin

#min  hour  day  month  dow  user  command
# Command jede Minute ausführen:
 *     *     *     *     *   root  <todo>
 
# Jeden Tag um 22.00 h alles im Verzeichnis /public 
# incl. Unterverzeichnisse löschen:
 0    22     *     *     *  pingu  rm -r /public/*
 
# delpub jeden Sa. um 22:00 h aufrufen
 0    22     *     *     6   root  /root/bin/delpub
 
# Befehl oder Script alle 5 min ausführen
*/5    *     *     *     *   root  <todo>

# mail_poll alle 2 Stunden ausführen
 00   */2    *     *     *  root  /usr/local/bin/mail_poll
Script zum Beispielaufbau der cron-Tabelle:
#!/bin/sh
# delete /public dir
rm -rf /public 2&1>/dev/null
mkdir /public

Den Script in /root/bin/delpub ablegen und mit dem Ausführungsrecht versehen:

user@sonne> chmod 700 /root/bin/delpub

Danach aufrufen:

user@sonne> crontab -e

Nun im Editor die Beispielzeilen zu delpub in der crontab eintragen. Ab sofort wird jeden Samstag um 2200h das Verzeichnis /public recursiv gelöscht und anschliessend neu angelegt.
 


Zugriffsrechte auf cron:


Die Verwendung von cron ist auf diejenigen Anwender beschränkt, die in der Datei /var/cron/allow erwähnt werden. Existiert diese Datei nicht, wird überprüft, ob /var/cron/deny vorhanden ist. Darin aufgeführte User sind von den cron-Diensten ausgeschlossen. Existieren beide Dateien nicht, kann nur der Superuser cron verwenden.
 


Anmerkungen


Anwender, die cron-Tabellen installiert haben, können diese auch dann ausführen lassen, wenn sie nicht im System angemeldet sind. Tritt bei der Ausführung ein Fehler auf, erfolgt die entsprechende Ausgabe via mail an den entsprechenden Anwender.

Da die Einträge in den cron-Tabellen dazu neigen, recht unübersichtlich zu werden, empfiehlt sich die Verwendung von Befehls-Scripten.

Die hier beschriebene Variante von cron erlaubt einige zusätzliche Einträge in die cron-Tabellen. So ist für den Superuser die Möglichkeit vorgesehen, Einträge zu verwenden, die auch im Fehlerfall keine Meldung auslösen. Dazu muss das erste Zeichen des Eintrags ein "-" (Bindestrich) sein. Auch besteht die Möglichkeit, Mails nicht nur an Eigentümer der Accounts zu senden sondern auch an andere User.
 


Installation:


Die Linux-Distributionen handhaben die Installation zum Teil völlig unterschiedlich. Allen gemeinsam ist, dass cron während des Bootens automatisch gestartet wird. Die meisten Distributionen verfügen über eine zentrale cron-Tabelle /etc/crontab. Diese unterscheiden sich im Aufbau allerdings erheblich. Die Installationsroutinen richten bereits täglich, wöchentlich und monatlich auszuführende Scripten (oder Verzeichnisse, in denen solche stehen können) ein. Genauen Aufschluss über die unterstützten Möglichkeiten liefern hier nur die jeweiligen Dokumentationen.
 

cron und at:

cron überwacht in einem Minutenrhythmus die cron-Tabellen. Diese Eigenschaft wird oft genutzt, um die at-Dienste zu synchronisieren. In der cron-Tabelle wird öfter eine Zeile der folgenden Form angetroffen:

*  *  *  *  *  test -x /usr/sbin/atrun&& /usr/sbin/atrun

Oder:

# Run any at jobs every minute
*  *  *  *  *  root /usr/sbin/atrun

Optionen:

-e

 

(edit) Der in der Variablen $EDITOR definierte Editor wird mit der entsprechenden /var/cron/tabs/root-Datei aufgerufen. Ist die Variable $EDITOR nicht gesetzt, wird bei der hier beschriebenen Version (Vixie Cron) /usr/bin/vi verwendet. Nach dem Terminieren des Editors meldet der Befehl: crontab: installing new crontab.
-l (list) wird verwendet, um die aktuelle cron-Tabelle darzustellen.
-r (remove) entfernt die cron-Tabelle des Anwenders.
-u <Name> (user) Durch diese Angabe hat der Superuser die Möglichkeit, auf die cron-Tabelle von <Name> zuzugreifen.

Environment-Variablen:

$EDITOR wird ausgewertet bei der Angabe der Option -e. Einige Programmversionen werten stattdessen auch $VISUAL aus.
$VISUAL siehe $EDITOR

Siehe auch:   at   atd   atrun   cron

Beispiele für die Nutzung des Programms:

Den in der Variablen $EDITOR definierten Editor mit der entspechenden /var/cron/tabs/root-Datei aufrufen:

user@sonne> crontab -e

 

Die aktuelle cron-Tabelle darstellen:

user@sonne> crontab -l

 

Die cron-Tabelle des Anwenders entfernen:

user@sonne> crontab -r

 

Zugriff auf die interne cron-Tabelle von updatedb:

user@sonne> crontab -eu updated

 

Autor: Omega-X