Aus LinuxUser 10/2015

Systemd und SysVinit in der Praxis

© Dotshock, 123RF

Durchstarten

Beim Wettstreit zwischen dem klassischen Init und dem recht jungen Systemd trifft jahrzehntelang gewachsene Technik auf neue Konzepte.

Direkt nach dem Booten des Kernels startet ein Dienst, der das restliche System und den weiteren Betrieb bis zum Herunterfahren begleitet. Er trägt stets die Prozess-ID 1 und hörte bislang auf Linux-Rechnern in der Regel auf den Namen init; das System dahinter nannte sich SysVinit [1]. Mit Systemd [2] drängt ein neues Programm an die gleiche Stelle. Allerdings gibt sich der Neue nicht immer gleich zu erkennen: Mit einer Abfrage über den Prozessstatus-Monitor Ps ermitteln Sie, ob das System den klassischen Init oder Systemd benutzt.

Mit den oft genutzten Optionen ax des Ps-Kommandos erhalten Sie allerdings auf einem von Systemd verwalteten Rechner nicht die korrekte Ausgabe (Listing 1, erste Abfrage). Erst wenn Sie die Option -e verwenden, liefert Ps ein korrektes Ergebnis (zweite Abfrage). Dasselbe gilt für ein System, das SysVinit benutzt (dritte Abfrage). Pstree liefert grundsätzlich eine zutreffende Ausgabe.

Listing 1

$ ps -ax | head -2
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:01 /sbin/init
$ ps -e | head -2
  PID TTY          TIME CMD
    1 ?        00:00:01 systemd
$ ps -e | head -2
  PID TTY          TIME CMD
    1 ?        00:00:00 init

Old School

Linux und artverwandte Systeme unterscheiden verschiedene Systemzuständen, die sogenannten Runlevel, denen gegebenenfalls Dienste (Daemons) zugeordnet sind. Die Tabelle „Runlevel“ zeigt die für ein Linux-System typischen Zustände. Bis auf S erhalten dabei alle einen numerischen Wert zwischen 0 und 6. Die Runlevel von 2 bis 5 dienen je nach Distributionen unterschiedlichen Zwecken.

Runlevel

Wert Vorgang
0 kontrolliertes Beenden aller Prozesse, anschließendes Abschalten
S Single-User für root, ohne Netzwerk, Zugriff nur über Konsole
1 Single-User ohne Netzwerk, Zugriff nur über Konsole
2 bis 5 Mehrbenutzerbetrieb; Zugriff, Netzwerkzugriff und GUI distributionsspezifisch
6 kontrollierter Neustart

Welchen Runlevel das System beim Start standardmäßig anstrebt, können Sie der Datei /etc/inittab entnehmen; Listing 2 zeigt den entsprechenden Ausschnitt. Der Standard-Runlevel (initdefault) steht in der Zeile, die mit id beginnt – im Beispiel startet das System also in den Runlevel 2.

Listing 2

# The default runlevel.
id:2:initdefault:
# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin

Vor dem Standard-Runlevel durchläuft das System den Single-User-Modus (si:), ausgenommen bei Störungen während des Boot-Vorganges. Einen wichtigen Eintrag finden Sie in der letzten Zeile von Listing 2: Damit das System im Modus für Einzelbenutzer überhaupt funktioniert, führt Init einen automatischen Login für root aus.

Alles auf Start

Der Init-Prozess ruft die zum jeweiligen Runlevel gehörenden Start- und Stop-Skripte auf, um den gewünschten Zustand herzustellen. Bei Debian-basierten Systemen finden Sie diese unter /etc/init.d. Das Paketmanagement einer Distribution legt diese Skripte bei der Installation eines Diensts in der Regel an. Müssen Sie doch einmal ein solches Skript von Hand erstellen, sollten Sie sich an bereits existierende Dateien als Muster halten. Ändern Sie die Konfiguration eines Diensts, erlaubt es ein solches Skript, den Daemon zu stoppen und wieder zu starten oder den Status abzufragen (Abbildung 1). Die gewünschte Aktion – start, stop oder status – geben Sie beim Aufruf mit an.

Abbildung 1: Stoppen, Starten und den Status eines Dienstes abfragen – mittels Init-Skript brauchen Sie dazu nur das passende Schlüsselwort als Parameter.
Abbildung 1: Stoppen, Starten und den Status eines Dienstes abfragen – mittels Init-Skript brauchen Sie dazu nur das passende Schlüsselwort als Parameter.

Richtig abgelegt

Alle im Folgenden angegebenen Pfade beziehen sich auf Debian und verwandte Systeme. Andere Distributionen verwenden oft alternative Verzeichnisse.

Für jeden Runlevel existiert ein eigenes Verzeichnis, in dem sich Links befinden, die nach /etc/init.d/Skript zeigen. Der Name des symbolischen Links beginnt bei einem Startskript mit einem S, ein führendes K kennzeichnet das Skript zum Beenden („Kill“). Es folgt eine Nummer, die die Reihenfolge bestimmt, in der das System die Skripte abarbeitet. Installieren Sie Dienste per Paketmanagement, erhalten die Links die passenden Namen; bei selbst kompilierten Programmen müssen Sie selbst Hand anlegen, auch hinsichtlich der Reihenfolge. So funktioniert beispielsweise ein Webserver erst dann ordnungsgemäß, wenn das Netzwerk bereits läuft.

Im klassischen Init-System von Debian liegen unter /etc die Verzeichnisse für die Runlevel: rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d und rcS.d. Bei Debian 7 enthalten rc3.d, rc4.d und rc5.d fast identische Daten wie rc2.d, kommen aber in der Regel nicht zum Einsatz. Sie bieten damit die Möglichkeit, eigene Vorstellungen zu verwirklichen [3].

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 9 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
KAUFEN
LinuxUser 10/2015 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: