systemd verstehen: So steuerst du Dienste auf modernen Linux-Servern
systemd ist mehr als ein Ersatz für Init-Skripte: Units, Abhängigkeiten, Timer und Journal hängen zusammen. Wer nur systemctl start auswendig lernt, verschenkt genau die Automatisierung, für die systemd gebaut wurde.
Warum systemd oft erst beim ersten Ausfall wirklich verstanden wird
Im Alltag reichen start, stop, enable und status erstaunlich weit. Deshalb bleibt das Modell dahinter bei vielen Admins unscharf, bis ein Dienst nach dem Reboot nicht mehr hochkommt, ein Restart-Loop die Logs flutet oder eine Anwendung startet, bevor das Netzwerk oder das NFS-Mount bereit ist. Dann stellt sich heraus, dass systemd kein Ersatz für die alten Init-Skripte ist, sondern eine andere Denkweise: Statt einer festen Reihenfolge beschreibst du Abhängigkeiten und Zustände, und systemd entscheidet über die Parallelisierung.
Dazu kommt, dass systemd viel mehr ist als der Service-Manager. Ein Unit-Typ verwaltet Mounts, einer Sockets, einer Timer, einer Geräte, einer Ressourcengrenzen über cgroups. Wer nur .service kennt, baut Umwege: ein Cronjob statt eines Timers, ein Wrapper-Skript statt einer sauberen Dependency, ein selbst gebasteltes Logfile statt journald mit strukturierten Feldern. Das funktioniert eine Weile und fällt genau dann auf die Füße, wenn du unter Zeitdruck debuggen musst.
Typische Fehlerbilder wiederholen sich: Die Unit liegt im falschen Verzeichnis und wird von einem Paketupdate überschrieben, weil sie nicht als Drop-in unter /etc/systemd/system angelegt wurde. After= wird mit Requires= verwechselt, sodass die Reihenfolge stimmt, die Abhängigkeit aber fehlt oder umgekehrt. Der Type= passt nicht zum Verhalten des Prozesses, also gilt der Dienst als gestartet, obwohl er noch initialisiert. Und Restart=always verdeckt einen Konfigurationsfehler so lange, bis StartLimitBurst zuschlägt.
Vom Kernel bis zum laufenden Dienst
- 01 Kernel startet PID 1
- 02 default.target wird aufgelöst
- 03 Abhängigkeiten und Reihenfolge
- 04 Units starten parallel
- 05 Dienst läuft in eigener cgroup
- 06 journald sammelt Ausgabe
Das Modell in der richtigen Reihenfolge aufbauen
systemd wird beherrschbar, wenn du es von unten nach oben liest: erst die Unit als kleinste Einheit, dann die Beziehungen zwischen Units, dann die Targets als Zustände des Systems und zum Schluss die Beobachtbarkeit über journald. In dieser Reihenfolge gehen wir auch in den cmt-Kursen vor.
Unit-Typen unterscheiden und richtig wählen
service, socket, timer, mount, path, target und slice lösen jeweils ein eigenes Problem. Wenn du weißt, welcher Typ zuständig ist, ersparst du dir Wrapper-Skripte. Ein Socket, das den Dienst bei Bedarf aktiviert, ist etwas anderes als ein Dienst, der dauerhaft läuft, und ein Timer ist gegenüber einem Cronjob im Vorteil, weil er dieselbe Log- und Abhängigkeitsmechanik nutzt wie alles andere.
Eine eigene Unit sauber schreiben
Die drei Abschnitte [Unit], [Service] und [Install] haben klare Aufgaben. Entscheidend sind Type= (simple, exec, forking, oneshot, notify), ExecStart mit absolutem Pfad, User und Group, WorkingDirectory sowie eine Restart-Policy mit RestartSec und StartLimitIntervalSec. Eigene Units gehören nach /etc/systemd/system, Anpassungen an Distributions-Units als Drop-in via systemctl edit, danach systemctl daemon-reload.
Abhängigkeiten von Reihenfolge trennen
Before= und After= regeln ausschließlich die Reihenfolge, Requires=, Wants= und BindsTo= regeln, ob eine Unit überhaupt mitgestartet und bei Ausfall mitgerissen wird. Fast alle unerklärlichen Startprobleme entstehen daraus, dass beides vermischt wird. Mit systemd-analyze verify, systemctl list-dependencies und systemd-analyze critical-chain machst du das sichtbar, statt zu raten.
Targets statt Runlevel denken
multi-user.target, graphical.target, network-online.target und rescue.target sind keine durchnummerierten Runlevel, sondern Synchronisationspunkte. Wichtig ist der Unterschied zwischen network.target und network-online.target, an dem sich viele Dienste verschlucken, die zum Start bereits eine erreichbare Adresse brauchen.
journald als erste Anlaufstelle beim Debugging
journalctl -u dienst -b, --since, -p err und -f liefern in Sekunden das, wofür sonst mehrere Logdateien durchsucht werden. Du lernst, wann ein persistentes Journal unter /var/log/journal sinnvoll ist, wie Rotation und SystemMaxUse konfiguriert werden und wie sich das Journal parallel an einen bestehenden Syslog- oder Loki-Stack weiterreichen lässt.
Ressourcen und Absicherung über die Unit
cgroups sind in systemd direkt in der Unit erreichbar: MemoryMax, CPUQuota und TasksMax begrenzen einen Dienst, ohne dass du eine externe Lösung brauchst. Dazu kommen Sandbox-Optionen wie ProtectSystem, PrivateTmp, NoNewPrivileges und ReadWritePaths, mit denen ein Dienst deutlich weniger Angriffsfläche hat. systemd-analyze security zeigt dir, wo eine Unit noch offen ist.
Kurse zu systemd-Grundlagen bei cmt
Diese Kurse vertiefen genau das, an echten Systemen statt nur an Folien. Als Präsenz oder Live-Online, auf Wunsch auch Inhouse für dein Team.
Teste dich und finde deinen Weg
Bevor du einen Kurs buchst, lohnt sich eine ehrliche Standortbestimmung. Die Tests sind kostenlos und ohne Anmeldung.
Häufige Fragen zu systemd-Grundlagen
Noch etwas offen? Wir sind ohne Warteschleife für dich da.
Frag uns direktWas ist der Unterschied zwischen einer Unit, einem Service und einem Target?
Warum startet mein systemd-Service nicht, obwohl das Kommando in der Shell funktioniert?
Soll ich Cronjobs auf systemd-Timer umstellen?
Wie finde ich heraus, was den Systemstart verlangsamt?
Muss ich für LPIC-1 oder RHCSA systemd können?
Zuletzt geprüft am 26. Juli 2026.
Verwandte Linux-Themen
Alle Linux-Themen im ÜberblickEchte Stimmen aus unseren IT-Kursen
Die Schulung war genau das richtige, um mein Verständnis zu erweitern. Vielen Dank an den Trainer!
Trainer gut und verständlich. Unterlagen nur zum lesen (keine Kopierfunktion). Wissenstransfer erfolgreich.
Deine Ansprechpartner
Du bist dir nicht sicher, welcher Kurs oder welches Level zu dir passt? Wir beraten dich persönlich und kostenlos.
Yves Hoppe
Weiterbildung & Beratung
Hilft dir, aus dem Linux-Programm den passenden Kurs oder Lernpfad zu finden.
Norbert Jansen
Beratung & Inhouse
Plant mit dir Inhouse-Trainings, die exakt auf eure Systemlandschaft und Distributionen zugeschnitten sind.
Du willst systemd nicht nur bedienen, sondern verstehen
In unseren Linux-Kursen baust du eigene Units, Timer und Drop-ins auf echten Systemen und analysierst Startprobleme mit systemd-analyze und journalctl, statt sie wegzustarten. Der Linux Aufbaukurs: Administration und Systemmanagement (LPI02) ist der direkte Einstieg, LFS207 und RH124 decken denselben Stoff im Linux-Foundation- beziehungsweise Red-Hat-Kontext ab. Alle Termine gibt es als Live-Online-Schulung und als Präsenzkurs, und wenn du unsicher bist, welcher Kurs zu deinem Stand passt, melde dich einfach bei uns.