Inhaltsverzeichnis
Init-Systeme: System V vs. systemd
Kurzfassung: Init-Systeme sind die ersten Prozesse beim Linux-Boot (PID 1) und verwalten alle anderen Services. System V Init war der klassische Standard, systemd ist der moderne Nachfolger mit erweiterten Features. Zielgruppe: Systemadministratoren zum Verständnis der Init-System-Architekturen.
Übersicht
Das Init-System ist das Herzstück jedes Linux-Systems und startet als erster Prozess (PID 1) beim Booten. Es ist verantwortlich für das Starten, Stoppen und Überwachen aller System-Dienste. Während System V Init jahrzehntelang der Standard war, hat systemd seit 2010 die Linux-Welt revolutioniert und ist heute auf den meisten Distributionen Standard.
Voraussetzungen
- Grundverständnis des Linux-Boot-Prozesses
- Kenntnis von Services und Daemons
- Root-Privilegien für Service-Management
System V Init - Das klassische System
Merkmale
- Entwickelt: 1980er Jahre (AT&T Unix System V)
- Konzept: Runlevel-basiert (0-6)
- Start-Methode: Sequenziell (ein Service nach dem anderen)
- Konfiguration: Shell-Skripte in /etc/init.d/
- Standard bis: ~2015 (verschiedene Distributionen)
Architektur
Kernel
└─ init (PID 1)
└─ Liest /etc/inittab
└─ Startet Services aus /etc/rcX.d/ (X = Runlevel)
└─ Führt Shell-Skripte aus /etc/init.d/ aus
Runlevel-Konzept
0 → Halt (Herunterfahren) 1 → Single-User-Modus (Wartung) 2 → Multi-User ohne Netzwerk 3 → Multi-User mit Netzwerk (CLI) 4 → Benutzerdefiniert 5 → Multi-User mit GUI (X11) 6 → Reboot (Neustart)
Kommandos
# Service-Verwaltung sudo service apache2 start sudo service apache2 stop sudo service apache2 restart sudo service apache2 status # Autostart konfigurieren sudo update-rc.d apache2 defaults sudo update-rc.d apache2 disable # Runlevel-Wechsel sudo init 3 sudo telinit 5 # Aktuellen Runlevel anzeigen runlevel
Vorteile von System V
- ✓ Einfach zu verstehen (Shell-Skripte)
- ✓ Gut dokumentiert
- ✓ Stabil und erprobt
- ✓ Geringe Systemanforderungen
- ✓ Leicht zu debuggen (lesbare Skripte)
Nachteile von System V
- ✗ Langsamer Boot (sequenzieller Start)
- ✗ Keine Prozessüberwachung
- ✗ Kein automatischer Service-Neustart
- ✗ Komplexe Abhängigkeitsverwaltung
- ✗ Keine parallele Ausführung
- ✗ Kein Ressourcen-Management
- ✗ Inkonsistente Service-Skripte
systemd - Das moderne Init-System
Merkmale
- Entwickelt: 2010 (Lennart Poettering, Red Hat)
- Konzept: Target-basiert (Ersatz für Runlevel)
- Start-Methode: Parallel und on-demand
- Konfiguration: Unit-Files (INI-ähnliche Syntax)
- Standard seit: 2015+ (meiste Distributionen)
Architektur
Kernel
└─ systemd (PID 1)
├─ Units (.service, .socket, .target, etc.)
├─ journald (Logging)
├─ logind (Session-Management)
├─ networkd (Netzwerk)
├─ resolved (DNS)
├─ timesyncd (Zeit-Sync)
└─ udevd (Device-Management)
Target-Konzept (Ersatz für Runlevel)
poweroff.target → System herunterfahren (Runlevel 0) rescue.target → Rettungsmodus (Runlevel 1) multi-user.target → Multi-User CLI (Runlevel 2,3,4) graphical.target → Multi-User GUI (Runlevel 5) reboot.target → Neustart (Runlevel 6)
Unit-Typen
- .service - Services/Daemons (apache2.service)
- .socket - Socket-basierte Aktivierung
- .target - Gruppierung von Units (multi-user.target)
- .mount - Dateisystem-Mountpoints
- .timer - Zeitgesteuerte Aktivierung (cron-Ersatz)
- .device - Hardware-Geräte
- .path - Pfad-basierte Aktivierung
- .slice - Ressourcen-Gruppen (cgroups)
Kommandos
# Service-Verwaltung sudo systemctl start apache2 sudo systemctl stop apache2 sudo systemctl restart apache2 sudo systemctl status apache2 sudo systemctl reload apache2 # Autostart konfigurieren sudo systemctl enable apache2 sudo systemctl disable apache2 sudo systemctl is-enabled apache2 # Service-Übersicht systemctl list-units --type=service systemctl list-unit-files systemctl list-dependencies apache2 # Target-Verwaltung sudo systemctl isolate multi-user.target sudo systemctl set-default graphical.target systemctl get-default # Logs anzeigen journalctl -u apache2 journalctl -u apache2 -f journalctl -b
Vorteile von systemd
- ✓ Schneller Boot (paralleler Start)
- ✓ Automatischer Service-Neustart
- ✓ Socket-Aktivierung (on-demand)
- ✓ Integriertes Logging (journald)
- ✓ Ressourcen-Management (cgroups)
- ✓ Abhängigkeiten klar definiert
- ✓ Konsistente Unit-Files
- ✓ Monitoring und Watchdog
- ✓ Transaktionen (atomare Änderungen)
- ✓ Snapshot und Restore
Nachteile von systemd
- ✗ Komplexer als SysV
- ✗ Monolithischer Ansatz (viele Komponenten)
- ✗ Höherer Speicherverbrauch
- ✗ Binary-Logs (journald)
- ✗ Steile Lernkurve
- ✗ Kontroverse in der Community
Direkter Vergleich
Boot-Zeit
System V Init: 60-120 Sekunden (sequenziell) systemd: 10-30 Sekunden (parallel)
Service-Management
| Aktion | System V | systemd |
| Service starten | service nginx start | systemctl start nginx |
| Service stoppen | service nginx stop | systemctl stop nginx |
| Service neustarten | service nginx restart | systemctl restart nginx |
| Service-Status | service nginx status | systemctl status nginx |
| Autostart aktivieren | update-rc.d nginx defaults | systemctl enable nginx |
| Autostart deaktivieren | update-rc.d nginx disable | systemctl disable nginx |
| Alle Services | service –status-all | systemctl list-units –type=service |
Konfigurationsdateien
System V:
# Service-Skripte /etc/init.d/ # Alle Service-Skripte (ausführbare Shell-Skripte) /etc/init.d/apache2 # Beispiel: Apache2-Service /etc/init.d/mysql # Beispiel: MySQL-Service /etc/init.d/ssh # Beispiel: SSH-Service # Runlevel-Verzeichnisse (symbolische Links) /etc/rc0.d/ # Runlevel 0 (Halt) /etc/rc1.d/ # Runlevel 1 (Single-User) /etc/rc2.d/ # Runlevel 2 /etc/rc3.d/ # Runlevel 3 (Multi-User CLI) /etc/rc4.d/ # Runlevel 4 /etc/rc5.d/ # Runlevel 5 (Multi-User GUI) /etc/rc6.d/ # Runlevel 6 (Reboot) /etc/rc3.d/S20apache2 # Start-Link: S=Start, 20=Priorität /etc/rc3.d/K80apache2 # Kill-Link: K=Kill/Stop, 80=Priorität # Haupt-Konfiguration /etc/inittab # Init-Konfiguration (Standard-Runlevel, etc.) /etc/rc.local # Lokales Start-Skript (optional) # Defaults /etc/default/ # Service-spezifische Einstellungen /etc/default/apache2 # Apache2 Umgebungsvariablen /etc/default/grub # GRUB Bootloader Einstellungen
systemd:
# Unit-Dateien (Priorität: absteigend) /etc/systemd/system/ # Eigene/Admin Units (höchste Priorität) /etc/systemd/system/apache2.service # Eigene Service-Unit /etc/systemd/system/multi-user.target.wants/ # Abhängigkeiten für Targets /run/systemd/system/ # Runtime Units (flüchtig, nach Reboot weg) /run/systemd/generator/ # Generierte Units /lib/systemd/system/ # System Units (Paket-Manager) /usr/lib/systemd/system/ # Alternative Paket-Units (Distribution) /lib/systemd/system/apache2.service # Standard Apache2-Unit /lib/systemd/system/ssh.service # Standard SSH-Unit /lib/systemd/system/multi-user.target # Multi-User-Target # Konfiguration /etc/systemd/system.conf # systemd Haupt-Konfiguration /etc/systemd/journald.conf # Journal/Logging-Konfiguration /etc/systemd/logind.conf # Login-Manager-Konfiguration /etc/systemd/resolved.conf # DNS-Resolver-Konfiguration /etc/systemd/networkd.conf # Netzwerk-Konfiguration /etc/systemd/timesyncd.conf # Zeit-Synchronisation # Unit-Overrides (Drop-In-Dateien) /etc/systemd/system/apache2.service.d/ # Override-Verzeichnis /etc/systemd/system/apache2.service.d/override.conf # Änderungen ohne Original zu editieren # State und Runtime /var/lib/systemd/ # Persistente Daten /run/systemd/ # Runtime-Daten
Beispiel-Konfiguration
System V Init-Skript:
#!/bin/sh ### BEGIN INIT INFO # Provides: myapp # Required-Start: $network # Required-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO case "$1" in start) /usr/bin/myapp & ;; stop) killall myapp ;; restart) $0 stop $0 start ;; esac
systemd Unit-File:
[Unit] Description=My Application After=network.target [Service] Type=simple ExecStart=/usr/bin/myapp Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target
Pfad-Hierarchie und Prioritäten
System V Priorität:
1. /etc/init.d/ # Service-Skripte 2. /etc/rcX.d/ # Runlevel-spezifische Links 3. /etc/default/ # Service-Defaults 4. /etc/inittab # Init-Konfiguration
systemd Priorität (höchste zuerst):
1. /etc/systemd/system/ # Admin-Units (überschreiben alles) 2. /run/systemd/system/ # Runtime Units (temporär) 3. /lib/systemd/system/ # Paket-Units (Standard) 4. /usr/lib/systemd/system/ # Distribution Units
Wichtig:
- systemd: Nie Units in
/lib/systemd/system/direkt bearbeiten! - Überschreibungen mit
systemctl editoder Drop-In in/etc/systemd/system/X.service.d/ - System V: Links in
/etc/rcX.d/nicht manuell erstellen (update-rc.dnutzen)
Logging
System V:
# Text-Logs in /var/log/ tail -f /var/log/syslog tail -f /var/log/messages grep apache2 /var/log/syslog
systemd:
# Binäre Logs (journald) journalctl -u apache2 journalctl -u apache2 -f journalctl -u apache2 --since "1 hour ago" journalctl -b -p err
Abhängigkeiten
System V:
# In Skript-Header definiert # Required-Start: $network $remote_fs # Reihenfolge durch Prioritätsnummern: S20, S30, S40...
systemd:
# Explizite Abhängigkeiten [Unit] After=network.target database.service Requires=database.service Wants=logging.service
Migration: System V → systemd
Kompatibilitäts-Layer
systemd bietet Abwärtskompatibilität:
# Alte Befehle funktionieren (als Wrapper) sudo service apache2 start # Ruft systemctl auf sudo update-rc.d apache2 defaults # SysV-Skripte werden automatisch integriert ls /etc/init.d/ # Alte Skripte bleiben systemctl list-units # Werden als systemd-Units verwaltet
Init-System feststellen
# Welches Init-System läuft? ps -p 1 -o comm= # Ausgabe: systemd oder init # Version anzeigen systemctl --version # systemd init --version # System V (selten vorhanden) # Alternative Prüfung stat /proc/1/exe # /lib/systemd/systemd → systemd # /sbin/init → könnte System V sein
Befehl-Mapping
# System V → systemd service X start → systemctl start X service X stop → systemctl stop X service X restart → systemctl restart X service X status → systemctl status X update-rc.d X defaults → systemctl enable X update-rc.d X disable → systemctl disable X chkconfig X on → systemctl enable X chkconfig --list → systemctl list-unit-files runlevel → systemctl get-default init 3 → systemctl isolate multi-user.target
Distributionen und ihre Init-Systeme
Aktuelle Nutzung (2026)
systemd (Standard):
- Ubuntu (ab 15.04)
- Debian (ab 8 Jessie)
- Fedora (ab 15)
- RHEL/CentOS/Rocky/Alma (ab 7)
- openSUSE
- Arch Linux
- Manjaro
System V Init (Legacy):
- Slackware (traditionell)
- Devuan (systemd-freies Debian)
- Ältere Distributionen (Debian 7, Ubuntu 14.04, CentOS 6)
Alternative Init-Systeme:
- OpenRC: Gentoo, Alpine Linux, Artix
- runit: Void Linux
- s6: Einige Embedded-Systeme
Hinweise
service funktioniert meist auf beiden
- Migration: systemd bietet bessere Performance und Features
- Logging: journalctl ist mächtiger als traditionelle Textlogs
- Ressourcen-Management: systemd cgroups für Service-Limits nutzen
systemctl daemon-reload nach Unit-File-Änderungen nicht vergessen
- journald-Logs können groß werden - regelmäßig prüfen: journalctl –disk-usage
- Bei systemd: Dependencies korrekt setzen (After, Requires, Wants)
- System V: Prioritätsnummern (S20, S30) bestimmen Start-Reihenfolge
