27.7 Upstart
Upstart wurde ursprünglich von und für Ubuntu entwickelt. Mittlerweile ist das Programm fester Bestandteil der aktuellen Ubuntu-Version, und auch andere Distributionen haben es bereits integriert. Gedacht ist Upstart als Ersatz für init, allerdings verwenden nach wie vor viele Distributionen letzteres System.
Was ist aber nun neu an Upstart? Das Besondere an ihm ist, dass der Start von Programmen (und damit auch von System- und Netzwerkdiensten) anhand von Events geschieht. Steckt man beispielsweise einen USB-Stick an den Rechner, so löst dies automatisch ein Event aus, das dazu führt, dass der USB-Stick gemountet wird. Die Entwickler haben dabei etwas weiter gedacht und sind zu dem Schluss gekommen, dass Upstart damit auch die Möglichkeit hat, den Cron-Dienst zu ersetzen (speziell durch die geplanten scheduled tasks). Außerdem kann Upstart Dienste neu starten, falls sie abgestürzt sind.
Upstart bezeichnet die einzelnen Skripte, die beim Eintreffen eines Events ausgeführt werden sollen, als »Jobs«. [Fn. Die hier gemeinten »Jobs« sind nicht mit den Jobs, die man aus der Shell kennt, zu verwechseln.] Sie werden im Verzeichnis /etc/event.d bzw. /etc/init abgelegt.
Benutzt man nicht gerade eine der wenigen Distributionen, die bereits Upstart benutzen, so darf man sich die Jobskripte mehr oder minder selbst schreiben. Es gibt zwar vorgefertigte Beispielskripte, doch diese müssen sehr wahrscheinlich recht aufwändig angepasst werden. [Fn. Das hängt sehr von der Distribution ab.]
Ein Beispiel
Der Aufbau der Skripte ist relativ simpel gehalten und soll im Folgenden an einem kommentierten Beispiel für den Cron-Dienst erläutert werden.
Listing 27.26 /etc/init/cron.conf
# cron – regular background program processing
# daemon
# cron is a standard UNIX program that runs
# user-specified programs at periodic scheduled times
description "regular background program processing daemon"
start on runlevel [2345]
stop on runlevel [!2345]
expect fork
respawn
exec cron
Sobald das System in den zweiten Runlevel (oder höher) wechselt wird dieses Skript ausgeführt (start on runlevel [2345]). Sobald diese hohen Runlevel verlassen werden, wird das jeweilige Skript so gestartet, dass alle gestarteten Tasks beendet werden (stop on runlevel [!2345]).
Mit expect fork wird signalisiert, dass sich der Prozess (also cron) forken wird. respawn bedeutet, dass ein Prozess, sollte er sich (etwa durch einen Speicherzugriffsfehler) beenden ohne explizit vom Administrator gestoppt worden zu sein, automatisch wieder neu gestartet wird. Die Dokumentation zu Upstart gibt hierfür das Beispiel von Netzwerkdiensten an, die nicht ausfallen sollen, und falls doch, automatisch neu gestartet werden sollen. Diese Situation trifft selbstverständlich auch auf Cron zu, denn dieser Dienst sollte zu jeder Zeit im Betrieb sein, um geplante Tasks auszuführen. Bräche Cron etwa gerade dann ab, wenn das nächtliche Backup gestartet werden sollte, und würde Cron dann nicht neu gestartet, so würde auch kein Backup erstellt.
Zuletzt wird der exec-Befehl ausgeführt. Er ruft cron auf – das Job-Skript ist damit abgearbeitet.
Betrachten wir nun noch ein weiteres Skript, nämlich ssh.conf:
Listing 27.27 /etc/init/ssh.conf
# ssh – OpenBSD Secure Shell server
#
# The OpenSSH server provides secure shell access to
# the system.
description "OpenSSH server"
start on filesystem or runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5
umask 022
pre-start script
test -x /usr/sbin/sshd || { stop; exit 0; }
test -e /etc/ssh/sshd_not_to_be_run && \
{ stop; exit 0; }
test -c /dev/null || { stop; exit 0; }
mkdir -p -m0755 /var/run/sshd
end script
# if you used to set SSHD_OPTS in /etc/default/ssh,
# you can change the 'exec' line here instead
exec /usr/sbin/sshd -D
SSH wird hier entweder dann gestartet, wenn ein Runlevel zwischen 2 und 5 eingeleitet wird, oder wenn das Root-Dateisystem verfügbar ist. Mit der Limitierung für respawn (die nur verwendet wird, wenn explizit, wie oben zu sehen, respawn in einer eigenen Zeile aktiviert wird), können Notfallkriterien für den Neustart von Prozessen gesetzt werden. Würde der obige Prozess zehnmal innerhalb von fünf Sekunden neu gestartet werden müssen, dann würde Upstart ihn nicht nicht noch einmal starten, weil er eventuell nicht mehr startbar ist und der permanente Neustart das System – im schlimmsten Falle – in die Knie zwänge. Die Standard-Umask (bereits aus vorherigen Kapitel bekannt) kann ebenfalls für den Dienst gesetzt werden. Der durch pre-start script und end script angegebene Bereich wird nur vor dem SSH-Start ausgeführt und dient dazu, einige Prüfungen (u. A. hinsichtlich der Existenz der Programmdatei des Dämons) durchzuführen. Neben pre-start können analog noch Anweisungen für post-start, pre-stop und post-stop festgelegt werden.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.