
Ein Server mit 40 laufenden Diensten ohne Plan, welche davon wirklich gebraucht werden, ist ein Security-Risiko, das nur auf den Knall wartet. systemctl gibt dir die volle Übersicht und Kontrolle über jeden Daemon auf deinem System.
Wie Linux-Dienste funktionieren
Linux-Dienste sind Hintergrundprozesse, die unabhängig von User-Sessions laufen. Sie kümmern sich um alles – vom Web-Hosting über die Cron-Planung bis hin zum SSH-Zugriff. Auf modernen Linux-Systemen werden sie von systemd verwaltet.
Was ist ein Daemon?
Ein Daemon ist ein Prozess, der im Hintergrund läuft, meistens direkt beim Booten startet und dann durchgehend aktiv ist. Der Name kommt aus der Unix-Tradition. Apache ist ein Daemon. sshd ist ein Daemon. MySQL ist ein Daemon. Sie haben kein kontrollierendes Terminal und brauchen keine User-Interaktion, um zu laufen.
systemd vs. ältere Init-Systeme
systemd hat SysVinit so um 2014-2015 als Standard-Init-System in den meisten großen Distros abgelöst. Die Hauptunterschiede: systemd startet Dienste parallel (schnellerer Boot), nutzt deklarative Unit-Dateien statt Shell-Skripte, trackt Abhängigkeiten explizit und integriert das Logging per Journal. Wenn du Ubuntu 16.04+, CentOS 7+ oder Debian 8+ nutzt, bist du mit systemd unterwegs.
Wie man Linux-Dienste auflistet
Alle Unit-Dateien mit systemctl auflisten
Der Hauptbefehl, um Dienste und ihren Status aufzulisten:
sudo systemctl list-unit-files --type=serviceDas spuckt jede Service-Unit-Datei auf dem Rechner aus – inklusive Status (enabled, disabled, masked, static oder failed) und der Standardeinstellung des Herstellers.
Nur laufende Dienste auflisten
Um nur aktive Dienste zu sehen:
sudo systemctl list-units --type=service --state=runningDas ist praktisch, wenn du checken willst, was wirklich läuft und was einfach nur installiert ist.
Dienste nach Status filtern
systemctl list services unterstützt das Filtern nach Status:
sudo systemctl list-units --type=service --state=failed„Failed“-Dienste sind die, die du dir sofort genauer anschauen solltest. Ein Dienst, der beim Booten abschmiert, ohne dass es jemand merkt, ist oft der Grund für seltsames Systemverhalten.
Dienste auf älteren Systemen auflisten
Auf Systemen, die noch SysVinit nutzen oder den „service“-Befehl haben:
service --status-allDie Ausgabe zeigt ein „+“ für laufend, „-“ für gestoppt und „?“ für einen unbekannten Status.
Wie man Linux-Dienste verwaltet
Einen Dienst starten und stoppen
Einen gestoppten Dienst starten:
sudo systemctl start nginxEinen laufenden Dienst stoppen:
sudo systemctl stop nginxDiese Änderungen greifen sofort, sind aber nicht dauerhaft. Wenn der Rechner neu startet, kehrt der Dienst zu seinem vorherigen Status (enabled/disabled) zurück.
Einen Dienst neu starten und neu laden
Vollständiger Neustart (stoppt und startet den Prozess):
sudo systemctl restart nginxKonfiguration neu laden, ohne den Prozess zu killen (wird von manchen Diensten unterstützt):
sudo systemctl reload nginx„reload“ ist besser für Dienste wie nginx, weil bei einem Neustart kurz die Verbindungen abbrechen. Nicht alle Dienste unterstützen das.
Beim Booten aktivieren und deaktivieren
Einen Dienst so einstellen, dass er beim Booten automatisch startet:
sudo systemctl enable nginxIhn deaktivieren:
sudo systemctl disable nginxAktivieren und direkt in einem Befehl starten:
sudo systemctl enable --now nginxStatus eines Dienstes checken
Den aktuellen Zustand und die neuesten Logs eines Dienstes anzeigen:
sudo systemctl status nginxDie Ausgabe zeigt, ob er „active“ oder „failed“ ist, seine PID, den Speicherverbrauch und die letzten 10 Journal-Zeilen. Das ist der erste Befehl, den du ausführst, wenn ein Dienst sich seltsam verhält.
systemctl-Ausgabe und Logs lesen
Dienstzustände interpretieren
Die fünf Zustände, die dir in der „list-unit-files“-Ausgabe begegnen:
- enabled: Der Dienst startet beim Booten über einen Symlink in /etc/systemd/system/ oder einem ähnlichen Pfad.
- disabled: Der Dienst startet nicht beim Booten, kann aber manuell gestartet werden.
- masked: Der Dienst ist „hart“ deaktiviert. Er kann nicht mal manuell gestartet werden, bis du ihn wieder mit „unmask“ freigibst.
- static: Der Dienst hat keinen „install“-Abschnitt in seiner Unit-Datei. Er läuft nur, wenn eine andere Unit ihn anfordert.
- failed: systemd hat versucht, den Dienst zu starten, aber er wurde mit einem Fehler beendet.
Logs mit journalctl anzeigen
systemd speichert alle Dienst-Ausgaben im Journal. Logs für einen bestimmten Dienst anzeigen:
sudo journalctl -u nginxDie Live-Ausgabe verfolgen:
sudo journalctl -u nginx -fNur die letzten 100 Zeilen anzeigen:
sudo journalctl -u nginx -n 100Best Practices für Linux Dienste Management
- Check die laufenden Dienste regelmäßig. Alles, was du nicht selbst installiert hast und nicht kennst, solltest du untersuchen.
- Maskiere Dienste, die niemals laufen sollen, statt sie nur zu deaktivieren. Deaktivieren lässt die Tür offen, dass andere Pakete sie einfach wieder einschalten.
- Nutz „enable –now“ und „disable –now“, um Zustände zu vermeiden, in denen ein Dienst zwar aktiviert ist, aber gar nicht läuft.
- Check nach jedem Reboot die fehlgeschlagenen Dienste: sudo systemctl –failed
- Starte Dienste in der Produktion nicht einfach neu, ohne vorher die „reload“-Option zu prüfen. Ein Reload stört den Betrieb deutlich weniger.
FAQ: Linux-Dienste auflisten
Führ das hier aus: sudo systemctl list-units –type=service –state=running. Das zeigt dir nur die aktuell aktiven Dienste. Für alle installierten Dienste (egal welcher Status) nutz du: sudo systemctl list-unit-files –type=service
Führ aus: sudo systemctl start service-name. Ersetz „service-name“ durch den echten Namen (z.B. nginx, mysql, sshd). Um ihn auch beim Booten zu aktivieren: sudo systemctl enable –now service-name
Führ aus: sudo systemctl enable service-name. Das erstellt die nötigen Symlinks, damit der Dienst beim Booten automatisch startet. Um ihn auch sofort zu starten, häng einfach „–now“ an: sudo systemctl enable –now service-name
stop halts the service right now but doesn’t change its boot behavior. disable removes the boot symlinks so it won’t start next reboot, but doesn’t affect the currently running instance. To both stop it now and prevent it from starting again, run: sudo systemctl disable --now service-name