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

System V Init - Das klassische System

Merkmale

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

Nachteile von System V

systemd - Das moderne Init-System

Merkmale

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

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

Nachteile von systemd

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:

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):

System V Init (Legacy):

Alternative Init-Systeme:

Hinweise

Für Administratoren: - Moderne Systeme: systemd-Kenntnisse essentiell - Legacy-Systeme: SysV-Verständnis noch wichtig - Kompatibilitäts-Layer: 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
Häufige Fehler vermeiden: - Nicht beide Systeme parallel für gleiche Services nutzen - SysV-Skripte nicht ohne Anpassung als systemd-Units verwenden - 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

Siehe auch

Quellen