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
systemdihn 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:
-
/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!
-
-
/run/systemd/system/
-
Zur Laufzeit generierte Units (z. B. temporäre Einstellungen).
-
-
/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 inExecStartist 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.targetentspricht 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).
No comments to display
No comments to display