Crontab
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.
- Minute
- Stunde
- Tag
- Monat
- 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
- 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
- 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