Ubuntu User Desktopia (Vorschau)
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Wissen<br />
Upstart<br />
4 Der Befehl „initctl“ zeigt eine Liste der verfügbaren<br />
Upstart-Jobs und ihren jeweiligen Status an. Auch die<br />
Prozessnummer erscheint in der Ausgabe.<br />
Info<br />
[1] Systemd:<br />
[http:// 0pointer. de/ blog/<br />
projects/ systemd. html]<br />
[2] Upstart-Projektseite:<br />
[http:// upstart. ubuntu. com/]<br />
[3] Upstart (Originalbeschreibung):<br />
[https:// wiki. ubuntu.<br />
com/ ReplacementInit]<br />
Listing 1<br />
01 # Beispiel: meindaemon<br />
02<br />
03 start on startup<br />
04 stop on runlevel 0<br />
05 stop on runlevel 6<br />
06<br />
07 pre‐start script<br />
08 # im Vorfeld: Ordner anlegen, Text U<br />
ausgeben<br />
09 mkdir ‐p /var/run/meindaemon<br />
10 echo „meindaemon ist nur ein U<br />
Beispiel“<br />
11 end script<br />
12<br />
13 exec /sbin/meindaemond<br />
14<br />
15 post‐stop script<br />
16 # Aufräumen: Ordner löschen<br />
17 rm ‐rf /var/run/meindaemon<br />
18 end script<br />
bei einem Event sofort die passende<br />
Antwort parat hat. Zugleich<br />
überwacht Upstart mit Hilfe einer<br />
Zustandsmaschine (engl. state machine)<br />
permanent den Status der<br />
Prozesse des Systems. So kann es<br />
Ereignisse initialisieren, die durch<br />
andere Prozesse ausgelöst werden.<br />
Ereignisse und<br />
Skripte<br />
Zu den unterstützten Ereignissen<br />
gehören etwa systemweite Funktionen<br />
wie startup, shutdown und<br />
runlevel, der Zustand spezifischer<br />
Prozesse (starting, started, stopping<br />
und stopped) sowie Ereignisse,<br />
die von spezifischen Anwendungen<br />
definiert und ausgelöst<br />
werden, wie beispielsweise dem<br />
NetworkManager.<br />
So lautet zum Beispiel die Grundregel<br />
für einen ständig laufenden Dienst wie logd<br />
schlicht start on startup und stop on shutdown.<br />
Einen Job, der den Administrator informiert, falls<br />
der Webserver Apache den Geist aufgibt, definieren<br />
Sie über eine Regel wie start on stopping apache2<br />
(„beginne, wenn Apache2 stoppt“). Durch<br />
Anwendungen definierte Ereignisse existieren in<br />
Form von Textausgaben (Abbildung 3). So informiert<br />
der NetworkManager über die Ausgaben<br />
net-device-up und net-device-down über die Verfügbarkeit<br />
von Netzwerkhardware (festgelegt in<br />
den Skripten /etc/ network/ if-up.d/ upstart und /etc/<br />
network/ if-down.d/ upstart). Dadurch kann eine<br />
Netzwerkregel für Upstart zum Beispiel start on<br />
net-device-up („beginne, wenn das Interface bereit<br />
ist“) lauten.<br />
Die letzten beiden Beispiele demonstrieren,<br />
wo Upstarts wirkliche<br />
Stärken liegen: Anstatt mit<br />
Hilfe von Nummern eine feste Reihenfolge<br />
von zu startenden Jobs<br />
zu definieren, teilen Dienste nun<br />
basierend auf ihrer Abhängigkeit<br />
von anderen Systemkomponenten<br />
mit, wann sie starten müssen. Als<br />
Ergebnis kann Upstart mehrere<br />
Aufgaben abarbeiten, die startup<br />
initialisiert.<br />
Sind die einzelnen Jobs bereit,<br />
rufen sie über eigene Ereignisauslöser<br />
abhängige Dienste und<br />
Programme auf. Braucht das<br />
Netzwerk etwas länger, bevor es<br />
einsatzbereit ist, hängt der Kernel<br />
inzwischen die Festplatten ein.<br />
Zugleich nehmen die vom vorhandenen<br />
Netzwerk abhängigen<br />
Aufgaben – etwa das Mounten von<br />
Netzwerkordnern über den NFS-Dienst – nicht<br />
unnötig Zeit in Anspruch, indem sie versuchen,<br />
vorzeitig zu starten.<br />
Das Runlevel-Event akzeptiert numerische Angaben<br />
in einer Regel, etwa start on runlevel 2<br />
oder start on runlevel 3, was die Runlevel 2 und<br />
3 abdeckt. Die von Anwendungen angestoßenen<br />
Ereignisse akzeptieren zudem Argumente. So<br />
kann der NetworkManager als Event net-device-up<br />
IFACE=eth0 ausgeben, sobald die erste Ethernet-<br />
Karte einsatzbereit ist. Das Argument lautet hier<br />
eth0. Ändern Sie den Eintrag zu net-device-down<br />
IFACE=wlan0, betrifft das Ereignis eine WLAN-<br />
Karte – so präzisieren Sie Ereignisse und definieren<br />
die dazu passenden Aktionen.<br />
Nicht zuletzt verwenden Sie Wildcards wie *<br />
und Boolesche Operatoren wie and und or, um<br />
flexiblere Auslöser zu generieren, etwa start on<br />
net-device-up eth* oder stop on nfs-down or mysqldown.<br />
Neben den Start- und Stop-Regeln muss ein<br />
Upstart-Job entweder einen exec-Befehl enthalten,<br />
der ein bestimmtes Programm aufruft, oder Shell-<br />
Skript-Code, der zwischen den Tags script und end<br />
script steht. Zusätzlichen Shell-Code lagern Sie in<br />
ein pre-start script oder post-stop script aus. Ersteres<br />
wird vor dem Start des Programms, Letzteres<br />
danach ausgeführt.<br />
Betrachten Sie den Code in Listing 1: Das Beispiel,<br />
das Sie in der Datei meindaemon.conf unter /etc/<br />
init ablegen würden, definiert zunächst drei auslösende<br />
Events. Tritt eines der Ereignisse ein, startet<br />
der fiktive Daemon meindaemond und führt Routinearbeiten<br />
durch. Im Vorfeld (pre-start script) und<br />
hinterher (post-stop script) kommen zwei Skripte<br />
zum Einsatz, die ein Verzeichnis anlegen und es<br />
wieder löschen.<br />
Für die meisten grundlegenden Dienste genügt<br />
das bisschen Code. Upstart kennt aber auch komplexere<br />
Optionen, darunter etwa instance. Diese<br />
erlaubt es, eine Aufgabe mehrmals auszuführen<br />
und bei jedem Aufruf eine neue Instanz der Anwendung<br />
aufzurufen.<br />
Upstart erforschen<br />
Beim Booten führt Upstart die über startup definierten<br />
Aufgaben sowie die relevanten Runlevel-<br />
Ereignisse aus. Startet oder stoppt in der Folge ein<br />
neuer Prozess, bekommt die Zustandsmaschine<br />
von Upstart von diesem Ereignis Wind und führt<br />
andere registrierte Jobs aus. Alle anderen Ereignisse,<br />
die durch laufende Prozesse ausgelöst werden<br />
(speziell die von Anwendungen definierten),<br />
erreichen Upstart über D-Bus, Linux’ Framework<br />
für die Interprozesskommunikation. Sind Sie ein<br />
Anwendungsentwickler, erfahren Sie auf der Webseite<br />
des Projekts [2] mehr über die Kommunikation<br />
mit Upstart.<br />
Auch als gelegentlicher Nutzer können Sie eine<br />
Menge über Upstart lernen, indem Sie Upstarts<br />
integriertes Kontrollkommando initctl verwenden.<br />
62 UBUNTU<br />
01/2011<br />
www.ubuntu-user.de<br />
user