26.02.2014 Aufrufe

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!