Zum Inhalt

Dienste und Prozesse mit systemd

systemd übernimmt auf vielen Linux-Distributionen den Systemstart und die Verwaltung von Diensten. Dazu gehören beispielsweise Webserver, Datenbankdienste und Netzwerkdienste. Mit dem Werkzeug systemctl fragst Du ihren Zustand ab und steuerst ihren Betrieb.

Die Beispiele beziehen sich auf Systemdienste. Zum Ändern ihres Zustands benötigst Du in der Regel Administratorrechte; deshalb enthalten die entsprechenden Befehle sudo. Ersetze apache2.service durch den tatsächlichen Dienstnamen auf Deinem System. Apache heißt beispielsweise auf Debian und Ubuntu häufig apache2.service, auf RHEL und Fedora httpd.service.

Was ist eine Unit?

systemd verwaltet Aufgaben und Ressourcen als Units. Ein Dienst ist nur eine von mehreren Unit-Arten:

Endung Aufgabe
.service Dienste und zugehörige Prozesse verwalten
.socket Sockets bereitstellen, über die Dienste bei Bedarf aktiviert werden können
.timer Aufgaben zeitgesteuert auslösen
.mount Einhängepunkte von Dateisystemen verwalten
.target Units zu einem gemeinsamen Zielzustand zusammenfassen

systemd verwaltet somit nicht jeden Prozess als eigenständigen Dienst. Ein Dienst kann mehrere Prozesse enthalten. Für einzelne Prozesse nutzt Du ergänzend Werkzeuge wie ps, top und kill.

Dienste starten, stoppen und prüfen

Befehl Bedeutung
systemctl status apache2.service Zeigt Zustand, Prozessinformationen und gegebenenfalls aktuelle Protokollmeldungen
systemctl is-active apache2.service Prüft, ob der Dienst aktiv ist
sudo systemctl start apache2.service Startet den Dienst jetzt
sudo systemctl stop apache2.service Stoppt den Dienst jetzt
sudo systemctl restart apache2.service Startet den Dienst neu; ein bisher nicht laufender Dienst wird ebenfalls gestartet
sudo systemctl reload apache2.service Veranlasst den laufenden Dienst, seine Anwendungskonfiguration neu einzulesen, sofern er dies unterstützt

start und stop ändern nicht automatisch die Einstellung für den nächsten Systemstart. Ein Neustart des Dienstes kann laufende Verbindungen unterbrechen. Ob ein Dienst reload unterstützt und welche Änderungen er dabei übernimmt, hängt von der Anwendung und ihrer Unit ab.

Autostart und aktuellen Zustand unterscheiden

Befehl Bedeutung
systemctl is-enabled apache2.service Zeigt den Aktivierungszustand der Unit, beispielsweise enabled, disabled oder static
sudo systemctl enable apache2.service Richtet die in der Unit vorgesehenen Aktivierungsverknüpfungen ein, typischerweise für den Systemstart
sudo systemctl disable apache2.service Entfernt diese Aktivierungsverknüpfungen
sudo systemctl enable --now apache2.service Aktiviert den Autostart und startet den Dienst sofort
sudo systemctl disable --now apache2.service Deaktiviert den Autostart und stoppt den Dienst sofort

Wichtig: enable allein startet einen Dienst nicht sofort. disable allein beendet einen laufenden Dienst nicht. Eine deaktivierte Unit kann weiterhin manuell oder über Abhängigkeiten beziehungsweise andere Aktivierungsmechanismen gestartet werden.

Nicht jede Unit lässt sich mit enable aktivieren. Der Zustand static bedeutet beispielsweise, dass keine entsprechenden Installationsanweisungen hinterlegt sind; solche Units können trotzdem über andere Units gestartet werden.

Geladene und installierte Units anzeigen

Befehl Bedeutung
systemctl list-units --type=service Listet geladene Service-Units, die aktiv sind, einen Auftrag haben oder fehlgeschlagen sind
systemctl list-units --type=service --all Zeigt alle aktuell geladenen Service-Units, einschließlich inaktiver Units
systemctl list-unit-files --type=service Zeigt installierte Service-Unit-Dateien und ihren Aktivierungszustand
systemctl --failed Zeigt fehlgeschlagene Units aller Unit-Arten
systemctl --failed --type=service Beschränkt die Anzeige fehlgeschlagener Units auf Dienste

Eine installierte Unit muss nicht bereits geladen sein. Um verfügbare Dienste zu finden, ist list-unit-files daher geeigneter als die unergänzte Ausgabe von list-units.

Konfiguration neu einlesen

Hier sind zwei unterschiedliche Ebenen zu beachten:

Geänderte Konfiguration Nächster Schritt
Unit-Datei oder systemd-Drop-in, beispielsweise unter /etc/systemd/system/ sudo systemctl daemon-reload liest die Unit-Konfiguration neu ein
Anwendungskonfiguration, beispielsweise eine Apache-Konfigurationsdatei Konfiguration mit dem anwendungsspezifischen Werkzeug prüfen und anschließend den Dienst mit reload oder restart aktualisieren

daemon-reload startet Dienste nicht neu und liest nicht automatisch deren Anwendungskonfiguration ein. Änderungen an einer Unit, etwa ein anderer Startbefehl, benötigen in der Regel anschließend einen Neustart des betroffenen Dienstes, um wirksam zu werden.

Beispiel nach dem manuellen Ändern einer Service-Unit oder eines Drop-ins:

sudo systemctl daemon-reload
sudo systemctl restart apache2.service
systemctl status apache2.service

Mit systemctl cat apache2.service kannst Du die zugehörige Unit-Datei und ihre Drop-ins ansehen. Für lokale Anpassungen verwendest Du vorzugsweise sudo systemctl edit apache2.service, statt die vom Paket bereitgestellte Unit-Datei zu überschreiben. Nach erfolgreichem Speichern über systemctl edit wird die Unit-Konfiguration automatisch neu eingelesen; ein erforderlicher Dienstneustart bleibt ein separater Schritt.

Fehler untersuchen

Wenn ein Dienst fehlschlägt, prüfst Du zuerst seinen Zustand und die zugehörigen Meldungen:

systemctl status apache2.service
sudo journalctl -u apache2.service -b -n 50

Die Journal-Abfrage zeigt bis zu 50 der neuesten Meldungen dieses Dienstes aus dem aktuellen Systemstart. Weitere Beispiele findest Du unter Fehlerdiagnose und Systemprotokolle.

Die vollständigen Optionen beschreibt das systemctl-Handbuch.