systemd

systemd ist der Standard-Init-Prozess und System-Manager in fast allen modernen Linux-Distributionen (z. B. Ubuntu, Debian, RHEL, Fedora, Arch Linux). Es wurde 2010 von Lennart Poettering und Kay Sievers entwickelt, um das alte, sequenzielle SysVinit-System abzulösen.

1. Was ist systemd und welche Aufgaben hat es?

Der Prozess systemd startet direkt nach dem Linux-Kernel und erhält immer die Process ID (PID) 1. Als Mutter aller Prozesse verfolgt und verwaltet es den gesamten Zustand des Betriebssystems.

Haupteigenschaften

  • Parallelisierung: Dienste werden beim Systemstart parallel gestartet, was die Bootzeit drastisch verkürzt.

  • Socket- und D-Bus-Aktivierung: Dienste werden erst gestartet, wenn auf ein Socket zugegriffen wird oder ein D-Bus-Aufruf eingeht (Lazy Loading).

  • Automatischer Dienst-Neustart: Stürzt ein Prozess ab, kann systemd ihn sofort neu starten.

  • Prozess-Tracking mit cgroups: Prozess-Gruppen werden sauber isoliert. Stoppt man einen Dienst, werden auch alle Tochterprozesse verlässlich beendet.

  • Einheitliches Logging: Zentrale Protokollierung aller System- und Dienstnachrichten über den Daemon journald.

2. Das Konzept der "Units"

In systemd wird alles über sogenannte Units verwaltet. Jede Unit repräsentiert eine Systemressource oder eine Aufgabe. Es gibt verschiedene Unit-Typen, erkennbar an ihrer Dateiendung:

Unit-Typ Endung Beschreibung
Service .service Verwaltet Hintergrundprozesse / Daemons (z. B. nginx.service, ssh.service).
Target .target Gruppiert andere Units (entspricht den alten Runleveln, z. B. multi-user.target).
Socket .socket Hört auf Netzwerksockets oder IPC-Pipes zur Socket-Aktivierung.
Timer .timer Zeitgesteuerter Ausführungstrigger (Ersatz für klassische Cronjobs).
Mount / Automount .mount / .automount Steuert das Einhängen von Dateisystemen (/etc/fstab-Ersatz).
Path .path Überwacht Dateien/Ordner auf Änderungen und startet daraufhin Services.
Slice / Scope .slice / .scope Verwaltet Ressourcenbeschränkungen (CPU, RAM) via cgroups.

3. Dateipfade & Speicherorte für Konfigurationen

Konfigurationsdateien sind in einer strikten Hierarchie organisiert:

  1. /lib/systemd/system/ (oder /usr/lib/systemd/system/)

    • Hier liegen die vom Paketmanager (APT, DNF, Pacman) installierten Standard-Units.

    • Wichtig: Diese Dateien niemals manuell bearbeiten, da sie bei Updates überschrieben werden!

  2. /run/systemd/system/

    • Zur Laufzeit generierte Units (z. B. temporäre Einstellungen).

  3. /etc/systemd/system/

    • Der Ort für eigene Konfigurationen.

    • Hier abgelegte Dateien haben Vorrang vor den Dateien in /lib/systemd/system/.

4. Aufbau einer .service-Unit-Datei

Eine Service-Datei besteht typischerweise aus drei Hauptabschnitten: [Unit], [Service] und [Install].

Ini, TOML
[Unit]
Description=Mein eigener Python-Webservice
After=network.target remote-fs.target
Wants=postgresql.service

[Service]
Type=simple
User=appuser
Group=appuser
WorkingDirectory=/var/www/myextension
ExecStart=/usr/bin/python3 /var/www/myextension/app.py
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s

# Sicherheits-Hardening (Optional)
ProtectSystem=full
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Die Abschnitte im Detail:

  • [Unit]

    • Description: Menschlich lesbarer Name.

    • After: Der Dienst startet erst nach den hier angegebenen Units.

    • Requires: Strikte Abhängigkeit. Schlägt eine hier genannte Unit fehl, startet auch dieser Dienst nicht.

    • Wants: Schwache Abhängigkeit. Versucht die genannte Unit zu starten, bricht aber bei Fehler nicht ab.

  • [Service]

    • Type:

      • simple (Standard): Der Befehl in ExecStart ist der Hauptprozess.

      • forking: Für klassische Daemons, die sich im Hintergrund abspalten (forken).

      • oneshot: Kurzläufer-Skripte, die einmalig laufen und sich beenden.

    • ExecStart: Der exakte Befehl zum Starten (immer mit absolutem Pfad!).

    • Restart: Wann soll neu gestartet werden? (always, on-failure, no).

    • RestartSec: Wartezeit vor dem Neustart.

  • [Install]

    • WantedBy: Bestimmt, in welchem Target die Unit beim Systemstart geladen wird (z. B. multi-user.target entspricht dem alten Runlevel 3 - Konsolenmodus).

5. Wichtige Befehle zur Verwaltung

Die Steuerung von systemd erfolgt über das Befehlszeilenwerkzeug systemctl.

Steuerung von Diensten

Bash
# Status eines Dienstes prüfen
systemctl status mein-dienst.service

# Dienst sofort starten / stoppen / neustarten
systemctl start mein-dienst
systemctl stop mein-dienst
systemctl restart mein-dienst

# Konfiguration neu laden ohne den Dienst zu stoppen
systemctl reload mein-dienst

# Autostart beim Booten aktivieren / deaktivieren
systemctl enable mein-dienst
systemctl disable mein-dienst

# Autostart aktivieren UND sofort starten
systemctl enable --now mein-dienst

Konfiguration bearbeiten und laden

Bash
# Erstellt/Editiert einen Override in /etc/systemd/system/
systemctl edit mein-dienst.service

# systemd-Daemon anweisen, Geänderte Unit-Dateien neu einzulesen (SEHR WICHTIG!)
systemctl daemon-reload

Targets und Systemzustände

Bash
# Aktuelles Standard-Target anzeigen
systemctl get-default

# Auf grafische Oberfläche (Runlevel 5) umstellen
systemctl set-default graphical.target

# Auf Konsolenmodus (Runlevel 3) umstellen
systemctl set-default multi-user.target

6. Logging mit journald

systemd-journald sammelt zentral alle Systemnachrichten (Kernel-Logs, stdout/stderr von Services, Syslog). Der Zugriff erfolgt über journalctl.

Bash
# Gesamtes Protokoll seit dem letzten Bootvorgang anzeigen
journalctl -b

# Live-Logs eines spezifischen Dienstes verfolgen (wie tail -f)
journalctl -u mein-dienst.service -f

# Logs der letzten 2 Stunden anzeigen
journalctl --since "2 hours ago"

# Nur Fehler-Nachrichten anzeigen
journalctl -u mein-dienst.service -p err

7. Weitere wichtige Komponenten des systemd-Ökosystems

systemd ist längst mehr als nur ein Init-System, sondern eine Suite von Werkzeugen:

  • timedatectl: Verwaltung von Zeitzone und NTP-Ressourcen.

  • hostnamectl: Verwaltung des Hostnamens und System-Metadaten.

  • localectl: Verwaltung von Tastaturlayouts und System-Locales.

  • resolved: Ein lokaler DNS-Resolver Daemon (resolvectl).

  • networkd: Netzwerkkonfiguration für Interfaces.

  • logind: Verwaltet Benutzer-Sitzungen und Power-Management (Reboot, Suspend).

Created 2026-09-24 13:20:59 UTC by Admin
Updated 2026-09-25 09:16:12 UTC by Admin