News  |   Buchempfehlungen  |   Links  |   Computerspiele  |   CD-R/DVD±R(W)

FreeBSD  |   NetBSD  |   Linux  |   Kursfahrt 2000  |   Medizinstudium

Schule  |   Über mich  |   Impressum  |   Feedback |   Übersicht

 
 

 

 Übersicht 
 
 Installation von NetBSD 1.6.2 
 
 Installation von NetBSD 2.0 
 
 IMAP-Server 
 
 anacron 
 




NetBSD: anacron - die etwas andere Zeitschaltuhr


Inhalt



Anacron installieren und konfigurieren

Hinweis: Soweit nicht anders erwähnt, müssen alle Schritte in dieser Anleitung als Superuser root ausgeführt werden, da es sich um administratorische Arbeiten handelt, die weitreichende Rechte erfordern. Nach Beendigung der Konfiguration darf man aber nicht vergessen, sich wieder als normaler User am System anzumelden!

Weiterhin wird vorausgesetzt, daß die NetBSD-Package-Collection (pkgsrc) korrekt installiert ist.

Auf jedem Serversystem gibt es verschiedene Dienste, die regelmäßig (z.B. jede Woche) ausgeführt werden müssen. Dazu zählt z.B. das Rotieren von Logdateien mittels newsyslog, das Aktualisieren der locate-Datenbank oder auch das in meiner NetBSD-IMAP-Anleitung beschriebene Skript bogo_train.

Bei einem klassischen Serversystem, das 24 Stunden pro Tag durchläuft, wird diese Aufgabe typscherweise von dem Daemon cron mit sogenannten "Cronjob" erledigt. Voraussetzung dafür ist allerdings, daß das System dafür tatsächlich läuft.

Mit einem kleinen Beispiel kann man diese Problematik sehr schnell verdeutlichen: Angenommen, man erstellt einen Cronjob, der jeden Sonntag um 15 Uhr eine neue locate-Datenbank erzeugt. Der zugehörige Rechner steht aber in einem Büro, und ist nur von Montags bis Freitags eingeschaltet. Infolge dessen wird die locate-Datenbank nie aktualisiert werden - weil der Cron-Daemon diesen Befehl eben nur genau Sonntags um 15 Uhr startet. Läuft das System zu diesem Zeitpunkt nicht, wird der Befehl auch nicht ausgeführt.

Zur Umgehung dieses Problems bietet es sich an, cron mit dem Programm anacron zu kombinieren. anacron hat andere Stärken als cron, es merkt sich nämlich, wann welches Programm zuletzt ausgeführt worden ist. Beispielsweise kann man für die locate-Datenbank einstellen, daß sie alle 7 Tage aktualisiert werden soll. Stellt anacron nun beim Systemstart fest, daß seit dem letzten Programmstart z.B. 8 Tage vergangen sind (oder auch beliebig mehr), so wird ein Update der Datenbank gestartet. Auf diese Weise ist sichergestellt, daß alle notwendigen Systemdienste auch dann regelmäßig ausgeführt werden, wenn der Rechner nicht 24 Stunden pro Tag durchläuft.

Im Gegensatz zu cron arbeitet anacron allerdings eher "ungenau", d.h. das kleinste einstellbare Intervall ist ein Tag. Dienste, die häufiger ausgeführt werden sollen (z.b. jede Stunde oder alle 15 Minuten) muß man weiterhin von cron starten lassen. Denn hier liegt die Stärke von cron, das sehr exakte (minutengenaue) Aufrufe ermöglicht.

Bevor ich das genaue Zusammenspiel von cron und anacron auf einer typischen NetBSD-Installation beschreibe, gilt es ersteinmal, anacron zu installieren. cron gehört zur NetBSD-Grundinstallation, muß also nicht installiert werden. Die Installation von anacron läuft NetBSD-typisch ab:
 root@host:~> cd /usr/pkgsrc/time/anacron
 root@host:/usr/pkgsrc/time/anacron> make install
Damit anacron auch bei jedem Systemstart aufgerufen wird, kopiert man das Startskript nach /etc/rc.d/ mittels
 root@host:~> cp /usr/pkg/share/examples/rc.d/anacron /etc/rc.d/
und aktiviert es in der /etc/rc.conf mit dem Eintrag
 anacron=YES
 anacron_flags="-s"
Der Eintrag anacron_flags="-s" sorgt dafür, daß anacron die aufzurufenden Programme nacheinander abarbeitet. Damit kann man auf schwächer dimensionierten Systemen eine zu hohe Systemlast verhindern. Nähere Informationen dazu finden sich in der guten Manpage unter man 8 anacron

Nun muß man dafür sorgen, daß sich cron und anacron nicht gegenseitig stören. Denn für das korrekte Funktionieren von anacron ist wichtig, daß die davon kontrollierten Dienste nicht an anacron vorbei aufgerufen werden, z.B. durch einen Cronjob. Also gilt es die crontab des Users root entsprechend anzupassen, die alle entsprechenden Cronjobs enthält. Der dazu nötige Befehl lautet crontab -e und öffnet die crontab im jeweiligen Lieblingseditor (der in der Umgebungsvariable $EDITOR eingestellt ist). Unter NetBSD sieht sie standardmäßig folgendermaßen aus:
 #
 SHELL=/bin/sh
 PATH=/bin:/sbin:/usr/bin:/usr/sbin
 HOME=/var/log
 CRON_WITHIN=7200
 #
 #minute hour mday month wday command
 #
 */10 * * * * /usr/libexec/atrun
 #
 # rotate log files every hour, if necessary
 0    * * * * /usr/bin/newsyslog
 #
 # do daily/weekly/monthly maintenance
 15   3 * * * /bin/sh /etc/daily 2>&1 | tee /var/log/daily.out | sendmail -t
 30   4 * * 6 /bin/sh /etc/weekly 2>&1 | tee /var/log/weekly.out | sendmail -t
 30   5 1 * * /bin/sh /etc/monthly 2>&1 | tee /var/log/monthly.out | sendmail -t
Zu Beginn der Datei werden ein paar allgemeine Variablen gesetzt. In den danach folgenden Zeilen (Kommentarzeilen werden mit einer # eingeleitet) ist jeweils ein Kommando angegeben, sowie die genaue Uhrzeit, zu der es ausgeführt werden soll. Die Spalten bedeuten dabei von links nach rechts, in welcher Minute, Stunde, an welchem Tag des Monats, in welchem Monat und an welchem Wochentag das Kommando ausgeführt werden soll. Ein Stern (*) steht stellvertretend für die Angabe "alle". D.h. das erste Kommando /usr/libexec/atrun wird alle 10 Minuten (*/10) in jeder Stunde, an jedem Tag des Monats, in jedem Monat und an jedem Wochentag ausgeführt.
Der zweite Befehl (/usr/bin/newsyslog) wird hingegen nur zu jeder vollen Stunde (0 in der Spalte für die Minuten) ausgeführt.

Diese beiden Kommandos werden mehrfach am Tag ausgeführt, also ist es sinnvoll, sie weiterhin von cron aufrufen zu lassen. Die nachfolgenden Befehle werden allerdings einmal pro Tag (das Skript /etc/daily) bzw pro Woche (/etc/weekly) oder pro Monat (/etc/monthly) aufgerufen. Hier ist es sinnvoll, den Aufruf von anacron vornehmen zu lassen. Nur so ist bei einem System, das nicht 24 Stunden pro Tag läuft, sichergestellt, daß diese Skripte regelmäßig ausgeführt werden.

Eine Möglichkeit, cron am Aufruf dieser Skripte zu hindern, wäre einfach die entsprechenden Zeilen durch ein Kommentarzeichen zu deaktivieren. Aber die folgende Lösung ist eleganter und überläßt anacron nur dann den Aufruf dieser Befehle, wenn es wirklich installiert ist. Außerdem sollte man anacron einmal pro Tag von cron aufrufen lassen - es könnte ja doch einmal sein, daß der Rechner länger als 24 Stunden durchläuft. Nach den Änderungen hat die crontab dann folgendes Aussehen:
 #
 SHELL=/bin/sh
 PATH=/bin:/sbin:/usr/bin:/usr/sbin
 HOME=/var/log
 CRON_WITHIN=7200
 #
 #minute hour mday month wday command
 #
 */10 * * * * /usr/libexec/atrun
 #
 # rotate log files every hour, if necessary
 0    * * * * /usr/bin/newsyslog
 #
 #
 # Einmal taeglich anacron aufrufen
 15   3 * * * /usr/pkg/sbin/anacron
 #
 # do daily/weekly/monthly maintenance
 15   3 * * * test -e /usr/pkg/sbin/anacron || /bin/sh /etc/daily 2>&1 | tee /var/log/daily.out | sendmail -t
 30   4 * * 6 test -e /usr/pkg/sbin/anacron || /bin/sh /etc/weekly 2>&1 | tee /var/log/weekly.out | sendmail -t
 30   5 1 * * test -e /usr/pkg/sbin/anacron || /bin/sh /etc/monthly 2>&1 | tee /var/log/monthly.out | sendmail -t
 
In diesem Beispiel wird anacron damit jeden Tag um 03.15 Uhr aufgerufen - natürlich nur, wenn der Rechner zu dieser Zeit überhaupt läuft.

Wichtig: Die crontab muß mit einer leeren Zeile enden, sonst wird der Befehl der letzten Zeile nicht beachtet!

Weitergehende Erläuterungen zu cron finden sich z.B. in der guten Anleitung von Henning Hülsebusch und Ulrich Heilmann unter http://www.newbie-net.de/anleitung_cron.html oder natürlich in den Manpages zu cron und crontab.

anacron ist nun fast fertig konfiguriert, jetzt gilt es nur noch festzulegen, welche Befehle von anacron ausgeführt werden sollen. Dazu dient die Konfigurationsdatei /usr/pkg/etc/anacrontab, die (im Gegensatz zu cron) mit einem beliebigen Texteditor bearbeitet werden kann.

Vorab ein paar Worte zur Syntax dieser Datei. Sie weicht etwas von der Cron-Syntax ab. In der ersten Spalte gibt man an, alle wieviel Tage ein Befehl ausgeführt werden soll. Steht dort beispielsweise eine 1, so wird der Befehl jeden Tag ausgeführt. Soll das Kommando nur einmal pro Woche ausgeführt werden, so setzt man dort eine 7

Wenn ein System längere Zeit ausgeschaltet war, könnte es sein, daß sehr viele Kommandos auf einmal ausgeführt werden müssen. Daher kann man in der zweiten Spalte eine Verzögerung (in Minuten) angeben, die nach dem Aufruf von anacron bis zur Ausführung des Kommandos gewartet wird. So kann man beispielsweise bei einem Befehl 15 eintragen und beim nächsten Befehl 30, und verhindert auf diese Weise eine zu starke Auslastung des Systems direkt nach dem Booten.

In der dritten Spalte gibt man einen eindeutigen Namen für den jeweiligen Auftrag an, der weder Leerzeichen noch Schrägstriche (/) enthalten darf. Danach folgt dann in der vierten und letzten Spalte schließlich das auszuführende Kommando.

Um die weiter oben beschriebenen System-Wartungsskripte unter NetBSD auszuführen, könnte die Datei /usr/pkg/etc/anacrontab damit folgendermaßen aussehen:
 # $NetBSD
 #
 # anacrontab - Configuration file for NetBSD.
 #
 # See anacrontab(5) and anacron(8) for more information.
 #

 SHELL=/bin/sh
 PATH=/bin:/sbin:/usr/bin:/usr/sbin
 HOME=/var/log

 #days delay id      command
 1     5     daily   /bin/sh /etc/daily 2>&1 | tee /var/log/daily.out | sendmail -t
 7     15    weekly  /bin/sh /etc/weekly 2>&1 | tee /var/log/weekly.out | sendmail -t
 30    30    monthly /bin/sh /etc/monthly 2>&1 | tee /var/log/monthly.out | sendmail -t

Natürlich steht es jedem frei, weitere eigene Aufträge für anacron zu erstellen. Um beispielsweise das in meiner NetBSD-IMAP-Anleitung beschriebene Skript bogo_train jeden Tag aufzurufen, fügt man folgende Zeile hinzu:
 #days delay id        command
 1     45    bogotrain /usr/local/bin/bogo_train

Damit wird das Skript jeden Tag 45 Minuten nach Systemstart aufgerufen - bzw jede Nacht um 4.00 Uhr, falls das System durchlaufen sollte.

-> Nach oben


Quellen und weiterführende Links


-> Nach oben



Nach oben


 


Valid CSS!

 
Zähler  Zugriffe auf diese Seite

   Letzte Änderung: 16.5.2005 by Hans-Michael Gerhards (HM-Gerhards@gmx.de)