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:
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.