Aus LinuxUser 08/2011

Eigene Dienste mit Upstart zünden

© Mrozsz, sxc.hu

Durchstarten

Unter Ubuntu wacht der SysV-Init-Ersatz Upstart über die komplexen Vorgänge beim Systemstart. Mit dem richtigen Know-how fügen Sie bei Bedarf hier ein eigenes Startskript ein.

Nachdem der Kernel die Hardware initialisiert hat, reicht er unter Ubuntu die Kontrolle über das System direkt an das Programm Upstart weiter. Diesem wiederum fällt die Aufgabe zu, die Hardware einzurichten und alle für den Betrieb notwendigen Dienste zu starten. Auf einem modernen Linux-System sind das mittlerweile eine ganze Menge – angefangen beim Druckdienst Cups über das X-Window-System bis zum Gnome Display Manager GDM, um nur drei der bekannteren Gesellen zu nennen.

Versteckspiel

Auf der Festplatte suchen Sie ein Programm namens Upstart vergebens. Das Werkzeug nutzt aus gutem Grund ein Pseudonym: Sobald der Linux-Kernel gestartet ist und den Computer in Beschlag genommen hat, ruft er stur das Programm /sbin/init auf. Um direkt nach dem Systemstart als erster Prozess mit der Nummer (PID) 1 die Arbeit aufzunehmen, versteckt sich Upstart folglich genau hinter diesem Namen. Deshalb finden Sie Upstart in der Liste mit allen Prozessen (ps -A) stets unter dem Pseudonym init; seine Manpage rufen Sie analog dazu über man init auf.

Schlangestehen

Um das gesamte System möglichst schnell hochzufahren, böte es sich an, alle Dienste gleichzeitig zu starten. Dummerweise hängen einige von anderen ab: So nimmt beispielsweise der Druckdienst Cups seine Arbeit erst auf, wenn das Netzwerk steht. Um solche Abhängigkeiten zu berücksichtigen, verwendet Upstart ein ereignisgesteuertes System: Sobald ein bestimmtes Ereignis eintritt, wie etwa „Netzwerk aktiviert“ oder „TV-Stick angeschlossen“, arbeitet Upstart alle zu diesem Ereignis passenden Jobs ab.

Hinter diesen Jobs verbergen sich einfache Textdateien, die die Befehle zum Starten der eigentlichen Dienste oder zum Einrichten der Hardware enthalten. Tritt zum Beispiel das Ereignis „Netzwerk aktiviert“ auf, geht Upstart alle zugehörigen Dateien durch, von denen wiederum eine das Drucksystem hochfährt. Jobs voneinander unabhängiger Ereignisse bearbeitet Upstart parallel. So ist es etwa dem gerade eingestöpselten Fernsehempfänger in der Regel egal, ob das Netzwerk bereits läuft.

Arbeitgeber

Wollen Sie einen eigenen Dienst beim Systemstart automatisch hochfahren, erstellen Sie eine passende Job-Datei, die den Namen des Jobs als Dateinamen sowie das Suffix .conf trägt. Der Inhalt setzt sich recht einfach zusammen: Listing 1 zeigt ein Beispiel, das beim Systemstart die Software zum Messen von Lärm startet. In jeder Zeile steht eine Anweisung beziehungsweise Information an Upstart; Kommentare beginnen ähnlich wie in Shell-Skripten mit einer Raute.

Hinter den Schlüsselwörtern description und author steht in Anführungszeichen eine Beschreibung und der Name des Autors. Bei beiden handelt es sich um freiwillige Angaben. Über die Zeile start on legen Sie fest, bei welchen Ereignissen Upstart diesen Job auf die Reise schickt. Die Software benötigt mindestens ein Dateisystem (filesystem), um die gemessenen Daten abzulegen. In aktuellen Upstart-Versionen darf start on nur einmal auftauchen.

Listing 1

description "Beispiel für einen Job"
author "Tim Schürmann"
start on filesystem
exec /usr/bin/messdaemon --log=/var/log/laerm/messung.log
pre-start script
# Erstelle notwendiges Verzeichnis:
mkdir -p /var/log/laerm
end script
post-stop script
# Aufräumen:
rm -rf /var/log/laerm
end script
respawn
respawn limit 5 60
stop on filesystem

Gelegentliche Zwischenfälle

Bleibt noch die Frage, welche Ereignisse es gibt, wie sie heißen und wo sie herkommen. Das allererste Ereignis mit dem Namen startup erzeugt Upstart direkt nach seinem Start selbst. Darüber hinaus gilt der Start und das Beenden eines Jobs ebenfalls als Ereignis. Mit der Anweisung

start on starting cups

setzt Upstart den eigenen Job zeitgleich mit Cups in Bewegung. Alternativ zu starting gibt es noch started. Damit läuft der eigene Job zu einem unbestimmten Zeitpunkt nach dem Start von Cups an. Soll der eigene Job dagegen erst dann anlaufen, wenn der Druckdienst stoppt, führt folgende Anweisung zum Ziel:

start on stopped cups

Einige Systemdienste produzieren eigene Ereignisse, wie etwa der Hardware-Manager Udev beim Einstöpseln eines Peripheriegeräts. Das Ereignis trägt dabei einen Namen nach dem Schema Subsystem-device-Aktion, wobei Subsystem für das Udev-Subsystem und Aktion für die entsprechende Aktion steht. Ein neu angeschlossener Datenträger löst also das Event block-device-added aus.

Eine Liste mit typischen Ereignissen sowie weitere Hilfestellungen liefert ab Ubuntu 11.04 beziehungsweise Upstart 0.9.4 die Manpage man upstart-events (Abbildung 1).

Abbildung 1: Ab Ubuntu 11.04 liefert die Manpage <code>upstart-events</code> wichtige Ereignisse auf.
Abbildung 1: Ab Ubuntu 11.04 liefert die Manpage upstart-events wichtige Ereignisse auf.

Setzt ein Job mehrere Ereignisse voraus, verknüpfen Sie diese in den Anweisungen über das Schlüsselwort and:

LinuxUser 08/2011 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: