Die Hauptaufgabe eines Init-Systems besteht darin, wesentliche Prozesse zu starten und zu stoppen. Unter Linux gab es drei wichtige Init-Implementierungen: System V, Upstart und systemd. Diese Lektion konzentriert sich auf die traditionellste Version, System V init, oft als SysV oder einfach systemv (ausgesprochen „System Five“) bezeichnet.
Um festzustellen, ob Ihr System die systemv-Implementierung verwendet, suchen Sie nach einer Datei /etc/inittab. Wenn diese Datei existiert, verwenden Sie höchstwahrscheinlich eine SysV-basierte Distribution.
Wie System V Prozesse verwaltet
Der Prozess systemv init startet und stoppt Dienste sequenziell. Wenn beispielsweise ein Dienst namens foo-b von foo-a abhängt, kann foo-b erst starten, wenn foo-a vollständig läuft. Das initv-System erreicht dies mithilfe von Shell-Skripten. Diese Skripte, die sich in bestimmten Verzeichnissen befinden, kümmern sich um das Starten und Stoppen von Diensten. Obwohl Sie benutzerdefinierte Skripte schreiben können, verlassen sich die meisten Systeme auf die vorinstallierten, die wesentliche OS-Dienste verwalten.
Vorteile und Nachteile
Der Hauptvorteil dieses sequenziellen Ansatzes ist seine Einfachheit und Vorhersehbarkeit. Die Fehlerbehebung bei Abhängigkeiten ist unkompliziert, da Sie wissen, dass foo-a immer vor foo-b startet. Der größte Nachteil des init v-Modells ist jedoch die Leistung, da Dienste typischerweise nacheinander gestartet werden, was im Vergleich zu modernen parallelen Systemen zu längeren Bootzeiten führt.
Runlevels in System V verstehen
In einer systemv-Umgebung wird der Zustand der Maschine durch Runlevels definiert, die von 0 bis 6 nummeriert sind. Diese Modi können zwischen Linux-Distributionen leicht variieren, folgen aber im Allgemeinen dieser Standardkonvention:
- 0: Herunterfahren (Shutdown)
- 1: Einzelbenutzermodus (Single User Mode)
- 2: Mehrbenutzermodus ohne Netzwerk
- 3: Mehrbenutzermodus mit Netzwerk
- 4: Unbenutzt
- 5: Mehrbenutzermodus mit Netzwerk und GUI
- 6: Neustart (Reboot)
Init-Skripte und Verzeichnisse
Wenn Ihr System bootet, überprüft es seinen konfigurierten Runlevel und führt die entsprechenden Skripte aus. Diese Skripte befinden sich typischerweise in Verzeichnissen wie /etc/rc.d/rc[runlevel].d/ oder in einem zentralen Verzeichnis /etc/init.d. Skripte, die mit S (Start) beginnen, werden beim Hochfahren ausgeführt, während diejenigen, die mit K (Kill) beginnen, beim Herunterfahren ausgeführt werden. Die Zahlen nach S oder K bestimmen die Ausführungsreihenfolge.
Zum Beispiel:
pete@icebox:/etc/rc.d/rc0.d$ ls
K10updates K80openvpn
In diesem Beispiel wird beim Wechsel zu Runlevel 0 (Herunterfahren) zuerst das Skript zum Beenden des Update-Dienstes und danach das Skript für OpenVPN ausgeführt. Den Standard-Runlevel Ihres Systems finden Sie in der Datei /etc/inittab, wo Sie ihn auch ändern können.
Es ist wichtig zu beachten, dass System V in den meisten modernen Linux-Distributionen weitgehend durch systemd ersetzt wurde. Sie können das Konzept der Runlevels jedoch immer noch in neueren Init-Systemen antreffen, da diese oft eine Kompatibilitätsschicht bieten, um ältere Dienste zu unterstützen, die auf systemv init-Skripten basieren.