systemctl — systemd-Dienste und Units steuern
Praxis-Guide zu systemctl: Dienste starten, stoppen, aktivieren und überwachen, Units und Targets verwalten und den Systemzustand steuern.
systemctl ist das zentrale Werkzeug, um den systemd-Init- und Service-Manager zu steuern – von einzelnen Diensten bis zum gesamten Systemzustand. Du startest, stoppst und lädst Dienste neu, aktivierst sie für den Autostart, prüfst ihren Status und arbeitest mit Units, Targets, Timern und Logs. Dieser Guide führt dich durch die Befehle, die du im Server-Alltag wirklich brauchst – vom schnellen restart bis zur Boot-Analyse mit systemd-analyze.
Dienste steuern
systemctl start <service> — Startet einen Dienst sofort.
systemctl start nginxsystemctl stop <service> — Stoppt einen laufenden Dienst.
systemctl stop nginxsystemctl restart <service> — Stoppt und startet einen Dienst neu. Verursacht eine kurze Ausfallzeit.
systemctl restart nginxsystemctl reload <service> — Lädt die Konfiguration neu, ohne den Dienst zu stoppen (keine Ausfallzeit, sofern unterstützt).
systemctl reload nginxsystemctl reload-or-restart <service> — Lädt neu, wenn der Dienst es unterstützt, andernfalls Neustart.
systemctl reload-or-restart php-fpmsystemctl try-restart <service> — Startet einen Dienst nur neu, wenn er gerade läuft.
systemctl try-restart nginxsystemctl kill <service> — Sendet ein Signal an die Prozesse eines Dienstes. Standardsignal ist SIGTERM.
systemctl kill nginxsystemctl kill -s SIGKILL <service> — Erzwingt das Beenden eines Dienstes, indem SIGKILL an alle seine Prozesse gesendet wird.
systemctl kill -s SIGKILL stuck-serviceAktivieren & Deaktivieren (Autostart)
systemctl enable <service> — Aktiviert einen Dienst, sodass er automatisch beim Booten startet.
systemctl enable nginxsystemctl disable <service> — Deaktiviert den automatischen Start eines Dienstes beim Booten.
systemctl disable nginxsystemctl enable --now <service> — Aktiviert beim Booten und startet sofort in einem Befehl.
systemctl enable --now nginxsystemctl disable --now <service> — Deaktiviert beim Booten und stoppt sofort in einem Befehl.
systemctl disable --now nginxsystemctl is-enabled <service> — Prüft, ob ein Dienst für den automatischen Start beim Booten aktiviert ist.
systemctl is-enabled nginxsystemctl reenable <service> — Deaktiviert und aktiviert einen Dienst neu. Nützlich nach Änderungen am [Install]-Abschnitt.
systemctl reenable nginxsystemctl mask <service> — Verhindert vollständig, dass ein Dienst gestartet wird (auch manuell). Verlinkt die Unit nach /dev/null.
systemctl mask bluetoothsystemctl unmask <service> — Hebt die Maskierung auf und erlaubt wieder den Start des Dienstes.
systemctl unmask bluetoothStatus & Inspektion
systemctl status <service> — Zeigt detaillierten Status inklusive Zustand, PID, Speicherverbrauch und letzten Log-Zeilen.
systemctl status nginxsystemctl is-active <service> — Prüft, ob ein Dienst gerade läuft. Gibt active oder inactive zurück.
systemctl is-active nginxsystemctl is-failed <service> — Prüft, ob ein Dienst fehlgeschlagen ist.
systemctl is-failed nginxsystemctl show <service> — Zeigt alle Eigenschaften eines Dienstes im Format key=value.
systemctl show nginxsystemctl show <service> -p <property> — Zeigt eine bestimmte Eigenschaft eines Dienstes.
systemctl show nginx -p MainPIDsystemctl show <service> -p ActiveState,SubState — Zeigt mehrere bestimmte Eigenschaften auf einmal.
systemctl show nginx -p ActiveState,SubState,MainPIDsystemctl cat <service> — Zeigt den vollständigen Inhalt der Unit-Datei eines Dienstes an.
systemctl cat nginxsystemctl help <service> — Öffnet die zu einem Dienst gehörende Man-Page (falls verfügbar).
systemctl help sshdUnits auflisten
systemctl list-units — Listet alle geladenen und aktiven Units auf.
systemctl list-unitssystemctl list-units --type=service — Listet nur Service-Units auf.
systemctl list-units --type=servicesystemctl list-units --state=running — Listet nur derzeit laufende Units auf.
systemctl list-units --state=runningsystemctl list-units --state=failed — Listet alle fehlgeschlagenen Units auf.
systemctl list-units --state=failedsystemctl list-units --all — Listet alle Units auf, auch inaktive.
systemctl list-units --allsystemctl list-unit-files — Listet alle installierten Unit-Dateien mit ihrem Aktiviert/Deaktiviert-Zustand auf.
systemctl list-unit-filessystemctl list-unit-files --type=service — Listet nur Service-Unit-Dateien mit ihrem Zustand auf.
systemctl list-unit-files --type=servicesystemctl list-unit-files --state=enabled — Listet nur aktivierte Unit-Dateien auf.
systemctl list-unit-files --state=enabledAbhängigkeiten & Reihenfolge
systemctl list-dependencies <service> — Zeigt einen Baum der Units, von denen ein Dienst abhängt.
systemctl list-dependencies nginxsystemctl list-dependencies <service> --reverse — Zeigt, welche Units von diesem Dienst abhängen (ihn benötigen).
systemctl list-dependencies nginx --reversesystemctl list-dependencies <service> --before — Zeigt Units, vor denen dieser Dienst startet.
systemctl list-dependencies nginx --beforesystemctl list-dependencies <service> --after — Zeigt Units, nach denen dieser Dienst startet.
systemctl list-dependencies nginx --afterUnit-Dateien verwalten
systemctl edit <service> — Erstellt eine Drop-in-Override-Datei für einen Dienst (öffnet den Editor). Änderungen überstehen Paket-Updates.
systemctl edit nginxsystemctl edit --full <service> — Bearbeitet die vollständige Unit-Datei direkt (kein Drop-in). Overrides überstehen Paket-Updates NICHT.
systemctl edit --full nginxsystemctl daemon-reload — Lädt die systemd-Manager-Konfiguration neu, nachdem Unit-Dateien geändert wurden. Nach jeder manuellen Änderung erforderlich.
systemctl daemon-reloadsystemctl revert <service> — Entfernt alle lokalen Anpassungen (Drop-ins) und stellt die Hersteller-Unit-Datei wieder her.
systemctl revert nginxsystemd-analyze verify <unit_file> — Prüft eine Unit-Datei auf Syntaxfehler und häufige Probleme.
systemd-analyze verify /etc/systemd/system/my-app.serviceTimer (Cron-Ersatz)
systemctl list-timers — Listet alle aktiven Timer mit ihren nächsten und letzten Auslösezeiten auf.
systemctl list-timerssystemctl list-timers --all — Listet alle Timer auf, auch inaktive.
systemctl list-timers --allsystemctl start <timer> — Startet einen Timer sofort.
systemctl start backup.timersystemctl enable --now <timer> — Aktiviert einen Timer dauerhaft über Neustarts hinweg und startet ihn jetzt.
systemctl enable --now backup.timersystemctl status <timer> — Zeigt den Timer-Status inklusive des nächsten geplanten Laufs.
systemctl status backup.timersystemd-analyze calendar '<expression>' — Testet und parst einen Kalenderausdruck, um zu sehen, wann er auslösen würde.
systemd-analyze calendar 'Mon..Fri *-*-* 06:00:00'systemd-run --on-calendar='<expression>' <command> — Erstellt einen transienten Timer, der einen Befehl nach Zeitplan ausführt.
systemd-run --on-calendar='*-*-* 02:00:00' /usr/local/bin/backup.shsystemd-run --on-active=<time> <command> — Erstellt einen transienten Timer, der einmalig nach einer Verzögerung läuft.
systemd-run --on-active=30m /usr/local/bin/cleanup.shJournalctl (Logs)
journalctl -u <service> — Zeigt alle Log-Einträge für einen bestimmten Dienst.
journalctl -u nginxjournalctl -u <service> -f — Folgt der Live-Log-Ausgabe eines Dienstes (tail).
journalctl -u nginx -fjournalctl -u <service> -n <lines> — Zeigt nur die letzten N Log-Zeilen eines Dienstes.
journalctl -u nginx -n 50journalctl -u <service> --since '<time>' — Zeigt Logs seit einem bestimmten Zeitpunkt.
journalctl -u nginx --since '1 hour ago'journalctl -u <service> --since '<start>' --until '<end>' — Zeigt Logs innerhalb eines Zeitraums.
journalctl -u nginx --since '2024-01-01' --until '2024-01-02'journalctl -u <service> -p <priority> — Filtert Logs nach Priorität: emerg, alert, crit, err, warning, notice, info, debug.
journalctl -u nginx -p errjournalctl -u <service> -o json-pretty — Gibt Logs im hübsch formatierten JSON-Format aus.
journalctl -u nginx -o json-prettyjournalctl -u <service> --no-pager — Gibt Logs ohne Pager aus (nützlich zum Weiterleiten in Pipes).
journalctl -u nginx --no-pager | grep errorjournalctl -b — Zeigt alle Logs des aktuellen Boots.
journalctl -bjournalctl -b -1 — Zeigt Logs des vorherigen Boots.
journalctl -b -1journalctl --list-boots — Listet alle aufgezeichneten Boot-Sitzungen auf.
journalctl --list-bootsjournalctl --disk-usage — Zeigt, wie viel Speicherplatz die Journal-Logs belegen.
journalctl --disk-usagejournalctl --vacuum-size=<size> — Reduziert den Journal-Log-Speicher auf eine maximale Größe.
journalctl --vacuum-size=500Mjournalctl --vacuum-time=<time> — Entfernt Journal-Einträge, die älter als die angegebene Zeit sind.
journalctl --vacuum-time=30dSystemzustand & Targets
systemctl get-default — Zeigt das Standard-Boot-Target (z. B. graphical.target, multi-user.target).
systemctl get-defaultsystemctl set-default <target> — Legt das Standard-Boot-Target fest.
systemctl set-default multi-user.targetsystemctl isolate <target> — Wechselt sofort zu einem anderen Target (wie ein Runlevel-Wechsel).
systemctl isolate multi-user.targetsystemctl list-units --type=target — Listet alle aktiven Targets auf.
systemctl list-units --type=targetsystemctl reboot — Startet das System neu.
systemctl rebootsystemctl poweroff — Fährt das System herunter und schaltet es aus.
systemctl poweroffsystemctl suspend — Versetzt das System in den Bereitschaftsmodus (Suspend-to-RAM).
systemctl suspendsystemctl hibernate — Versetzt das System in den Ruhezustand (Suspend-to-Disk).
systemctl hibernateAnalyse & Performance
systemd-analyze — Zeigt, wie lange der Systemstart gedauert hat (Kernel + Userspace).
systemd-analyzesystemd-analyze blame — Listet alle Dienste nach Startzeit auf, langsamste zuerst.
systemd-analyze blamesystemd-analyze critical-chain — Zeigt die kritische Kette der Units, die den Boot am stärksten verzögert haben.
systemd-analyze critical-chainsystemd-analyze critical-chain <service> — Zeigt die kritische Kette für einen bestimmten Dienst.
systemd-analyze critical-chain nginx.servicesystemd-analyze plot > boot.svg — Erzeugt eine SVG-Grafik des Boot-Vorgangs zur visuellen Analyse.
systemd-analyze plot > boot.svgsystemd-analyze security <service> — Analysiert die Sicherheits- und Sandboxing-Einstellungen eines Dienstes.
systemd-analyze security nginxNutzerdienste
systemctl --user start <service> — Startet einen Dienst auf Nutzerebene (kein root erforderlich).
systemctl --user start my-appsystemctl --user enable --now <service> — Aktiviert und startet einen Dienst auf Nutzerebene.
systemctl --user enable --now my-appsystemctl --user status <service> — Zeigt den Status eines Dienstes auf Nutzerebene.
systemctl --user status my-appsystemctl --user list-units --type=service — Listet alle Dienste auf Nutzerebene auf.
systemctl --user list-units --type=servicesystemctl --user daemon-reload — Lädt die systemd-Konfiguration auf Nutzerebene neu, nachdem Unit-Dateien bearbeitet wurden.
systemctl --user daemon-reloadloginctl enable-linger <user> — Erlaubt, dass Nutzerdienste auch laufen, wenn der Nutzer nicht angemeldet ist.
loginctl enable-linger deploy Fazit
systemctl bündelt die komplette Dienststeuerung unter systemd in einem konsistenten Kommando – im Alltag kommst du mit start, stop, restart, reload und status schon sehr weit. Wichtig ist der Unterschied zwischen enable/disable (Autostart beim Booten) und start/stop (sofortige Wirkung jetzt); enable --now kombiniert beides in einem Schritt. Nach jeder Änderung an Unit-Dateien gehört ein systemctl daemon-reload dazu, und list-units --failed zeigt dir schnell, was hakt. Sei vorsichtig bei kritischen Diensten: Ein stop, disable oder mask an sshd oder am Netzwerk kann auf einem entfernten Server den Zugang oder den nächsten Boot kappen. Auch reboot, poweroff und isolate greifen tief ins System ein – und die meisten Schreibaktionen brauchen sudo. Eigene Nutzerdienste verwaltest du ganz ohne root mit systemctl --user.
Weiterführende Links
- ubuntuusers-Wiki: systemd – ausführliche deutschsprachige Dokumentation zu systemd und seinen Werkzeugen
- Arch-Wiki: systemd (Deutsch) – tiefgehender deutschsprachiger Artikel zu systemd, Units und Timern
Verwandte Kommandos
- journalctl – Logs von systemd-Diensten und dem Journal abfragen
- loginctl – Nutzer-Sitzungen und Logins von systemd-logind verwalten
- hostnamectl – Hostnamen und Systeminformationen über systemd abfragen und setzen