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.
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.
Kernel
└─ init (PID 1)
└─ Liest /etc/inittab
└─ Startet Services aus /etc/rcX.d/ (X = Runlevel)
└─ Führt Shell-Skripte aus /etc/init.d/ aus
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)
# 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
Kernel
└─ systemd (PID 1)
├─ Units (.service, .socket, .target, etc.)
├─ journald (Logging)
├─ logind (Session-Management)
├─ networkd (Netzwerk)
├─ resolved (DNS)
├─ timesyncd (Zeit-Sync)
└─ udevd (Device-Management)
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)
# 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
System V Init: 60-120 Sekunden (sequenziell) systemd: 10-30 Sekunden (parallel)
| 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 |
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
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
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:
/lib/systemd/system/ direkt bearbeiten!systemctl edit oder Drop-In in /etc/systemd/system/X.service.d/ /etc/rcX.d/ nicht manuell erstellen (update-rc.d nutzen)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
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
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
# 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
# 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
systemd (Standard):
System V Init (Legacy):
Alternative Init-Systeme:
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