Crontab

Aus Wiki
Zur Navigation springen Zur Suche springen

Allgemein

Cron dient dazu zeitgesteuerte Aktionen auszulösen. Cron ist ein höchstflexibler Taskplaner, dem sehr individuelle Zeitangaben vorgegeben werden können.

Standardmäßig ist cron bereits installiert. Dies ist aber eine veraltete Version von Cron, sodass es empfehlenswert ist, eine aktuelle via ipkg zu installieren (Siehe Kapitell → Installation).

Um regelmäßige Aktionen auszulösen, werden diese in die Datei Crontab eingetragen:

vi /etc/crontab

Standardmäßig sieht die Crontab folgendermaßen auf der NSLU aus:

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
0 0-23/8 * * * root /usr/sbin/CheckDiskFull &>/dev/null
0 0 * * * root /usr/sbin/WatchDog &>/dev/null
1 * * * * root /usr/sbin/hwclock -s &>/dev/null

Aufbau der Cron-Einträge (Nach der Zeile #---------------- Default is Empty -------------#): Jeder Eintrag besteht aus 7 Feldern. Die ersten 5 Felder spezifizieren den Zeitpunkt der Ausführung des Kommandos (7. Feld). der 6. Parameter bestimmt das Userkonto unter dem der Befehl ausgeführt wird.

  1. Minute
  2. Stunde
  3. Tag
  4. Monat
  5. Wochentag (0 = Sonntag)


Jeder Parameter kann durch * ersetzt werden.

Beispiele:

0 * * * * 
=> Befehl wird an täglich, jede volle Stunde (0:00, 1:00, 2:00, ...) ausgeführt
1 12 * * 1
=> Befehl wird jeden Montag um 12:01 ausgeführt

Parameter können durch Komma getrennt werden

1,30 * * * * 
=> Befehl wird täglich jede Stunde und 1 Minute und 30 Minuten ausgeführt (0:01, 0:30, 1:01, 01:30, ...)

Auch Angaben in der Form sind möglich

0 */6 * * *
=> Befehl wird täglich alle 6 Stunden ausgeführt (0:00, 6:00, 12:00, ...)


Konkrete Anwendungen siehe → NTP zum regelmäßigen synchronisieren der Uhrzeit mit einem Zeitserver im Internet bzw. → DynDNS-Update zum Update der externen IP-Adresse bei einem Dynamic DNS-Anbieter wie http://www.Dyndns.org.

Weitere Informationen und Anleitungen gibt es genügend im Internet.

Installation

Die aktuelle Version von Cron (Im Internet ist auch die Rede vom "Real Cron" für die NSLU) ist sehr leicht mittels ipkg zu installieren:

ipkg update
ipkg install cron

Die Crontab dieser Version liegt nun nicht unter /etc/crontab wie vom Original Cron, sondern unter /opt/etc/crontab. Es empfiehlt sich, die Origianl Crontab nach /opt/etc/crontab zu kopieren, und in der originalen sämtliche Einträge auszukommentieren:

cp /etc/crontab /opt/etc/crontab
vi /etc/crontab

Vor allen Einträgen ein #- Kommentarzeichen einfügen.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
#0 0-23/8 * * * root /usr/sbin/CheckDiskFull &>/dev/null
#0 0 * * * root /usr/sbin/WatchDog &>/dev/null
#1 * * * * root /usr/sbin/hwclock -s &>/dev/null
Hinweis:
  • Wenn bereits Erweiterungen wie → NTP oder → DynDNS-Update eingerichtet wurden, sind hier evtl. mehr Einträge vorhanden.
  • Neben der Datei crontab wurde bei der Installation der Unterordner /opt/etc/cron.d eingerichtet. In diesem Ordner können Cron Konfigfiles abgelegt werden, die ebenfalls von Cron abgearbeitet werden. Der Aufbau der Files ist exakt identisch mit den Starteinträgen der crontab.


Konfiguration

Durch das Kopieren der originalen /etc/crontab nach /opt/etc/crontab wurden leider die Pfade mit den Originalpfaden überschrieben. Diese müssen nach dem Kopieren noch angepasst werden:

vi /opt/etc/crontab

Den PATH-Eintrag folgendermaßen abändern:

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/sbin:/opt/bin

Cron kann einige Programme/Tools nicht starten, da er die Umgebungsvariable LD_LIBRARY_PATH nicht kennt. Diese sollte in folgender Art und Weise nach PATH ergänzt werden:

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/sbin:/opt/bin
LD_LIBRARY_PATH=/opt/lib:/lib
Optional:
Falls der Mailserver → Postfix installiert ist, kann ein Empfänger für CRON-Mails angegeben werden. Der angegebene User bekommt dann eine Ausgabe von gestarteten Scripts in Form einer Mail zugesendet. Dies ist nützlich, um Fehlerausgaben direkt als Mail zu erhalten. "Normale" Ausgaben können nach /dev/null umgeleitet werden und generieren damit keine Systemmail. Es sollte deshalb hinter allen CRON-Einträgen die folgende Umleitung > /dev/null ergänzt werden, die diese noch nicht haben.


Mit folgendem Befehl werden alle Cron-Ausgaben an den user root weitergeleitet

MAILTO=root

Cron erwartet den sendmail-Befehl im Ordner /usr/sbin. Deshalb muß ein Link von /opt/sin/sendmail nach /usr/sbin/sendmail erstellt werden:

ln -s /opt/sbin/sendmail /usr/sbin/sendmail


Original Cron-Daemon anhalten:

killall crond

Start des Original-Crond beim booten der NSLU in Zukunft verhindern, indem ein sog. Diversion-Script angelegt wird:

vi /unslung/rc.crond

Folgende zwei Zeilen einfügen:

#!/bin/sh
return 0

Rechte anpassen:

chmod 777 /unslung/rc.crond

Real Cron starten:

/opt/etc/init.d/S10crond