Linux / Befehl systemctl: Systemd-Dienste verwalten
systemctl überprüft den Status von Diensten und anderen von systemd verwalteten Einheiten und steuert deren Start, Stopp, Neustart und Aktivierung beim Booten. Bei der Untersuchung eines Dienstfehlers überprüfen Sie zunächst den aktuellen Status mit status. Für die damit verbundenen Bedingungen und das Verfahren siehe Systemd-Dienste, Boot und Logs verstehen.
start ist die Aktion zum sofortigen Ausführen, und enable ist die Aktion, um sie beim Booten zu starten. Sie ersetzen einander nicht automatisch. active und enabled beziehen sich ebenfalls auf den aktuellen Betriebszustand und die Boot-Einstellung. Geben Sie den Einheitenamen eindeutig an und prüfen Sie die Protokolle mit journalctl -u.
Grundlegende Syntax
systemctl [option] command [unit]
Installierte Implementierungen und Optionen können je nach Distribution variieren. Überprüfen Sie die Beschreibung für das aktuelle System mit man systemctl.
Beispiele
Dienststatus überprüfen
Ersetzen Sie Beispiel-Unit-Namen durch die tatsächlichen Servicenamen auf Ihrem System.
systemctl status sshd.service
Überprüfen Sie, ob es derzeit läuft
Beim Überprüfen des Status in einem Skript überprüfen Sie auch den Exit-Status.
systemctl is-active sshd.service
Überprüfen Sie die Autostart-Einstellungen beim Booten
Sehen Sie sich den Aktivierungsstatus unabhängig von der aktuellen Ausführung an.
systemctl is-enabled sshd.service
Unterscheidung zwischen Service-Status und ob er läuft
systemctl is-active service_name zeigt kurz den aktuellen Ausführungsstatus an. Der folgende Service-Name sollte entsprechend Ihrer Umgebung geändert werden.
systemctl is-active sshd.service
Beispielausgabe auf einem System, auf dem der Dienst läuft:
active
active bedeutet, dass es derzeit ausgeführt wird. Der automatische Start beim Booten ist getrennt, also überprüfen Sie ihn mit systemctl is-enabled sshd.service. Die Servicenamen können je nach Distribution variieren, und restart kann eine Trennung verursachen, daher überprüfen Sie nach Ändern der Einstellungen zuerst die Ursache mit status und journalctl -u.
start startet jetzt einen Dienst, während enable seine Boot-Zeit-Aktivierungseinstellung ändert; keine der beiden Aktionen führt notwendigerweise die andere aus. Nach dem Bearbeiten einer Unit-Datei führen Sie sudo systemctl daemon-reload aus, um deren Definition neu zu laden, und starten dann den betroffenen Dienst nur, wenn es angebracht ist, und überprüfen seinen Status und die Protokolle.
Hauptoptionen und Format
| Optionen/Format | Beschreibung |
|---|---|
status unit |
Zeigt den Status und eine Zusammenfassung der letzten Protokolle an. |
start / stop unit |
Startet oder stoppt die Einheit derzeit. |
restart unit |
Hält an und startet dann wieder, sodass die Verbindung unterbrochen sein kann. |
reload unit |
Wenn der Dienst dies unterstützt, liest er die Konfiguration erneut, ohne neu zu starten. |
enable / disable unit |
Ändert die Einstellung für den automatischen Start beim Booten. |
Vorsichtsmaßnahmen bei der Verwendung
Das Stoppen oder Neustarten von Remotezugriffsdiensten oder das Ausführen von Webdiensten mit stop/restart kann Verbindungen und Anfragen unterbrechen. Überprüfen Sie zuerst den Namen der Einheit, das Änderungsfenster und das Wiederherstellungsverfahren. daemon-reload ist der Vorgang, der die geänderte Unit-Definition erneut liest, kein Befehl zum Neustarten des Dienstes. Er gilt nicht für Systeme, die nicht systemd verwenden.
Häufig gestellte Fragen
Wenn ich systemctl enable verwende, wird der Dienst sofort gestartet?
Normalerweise nicht. Enable ist eine Einstellung für den automatischen Start beim Booten. Um es jetzt auszuführen, müssen Sie start separat ausführen oder die unterstützte Option --now verwenden.
Vergleichen Sie laufende und aktivierte Zustände mit einer dedizierten Laboreinheit
Führen Sie dies in einer dedizierten Labor-VM mit systemd als PID 1 aus. Es erstellt eine neue Einmal-Einheit und stoppt weder SSH noch einen Webdienst. Es wird gestoppt, wenn der Labor-Dateiname oder das Drop-In bereits existiert. Das Aktivieren ändert vorübergehend die Boot-Konfiguration, daher ist nach der Überprüfung der Ergebnisse eine vollständige Bereinigung erforderlich.
(
set -eu
unit=lf-systemctl-lab.service
file=/etc/systemd/system/$unit
if sudo test -e "$file" || sudo test -L "$file" ||
sudo test -e "$file.d"; then
printf 'Lab name already exists; stop and choose another name.\n' >&2
exit 1
fi
sudo sh -c 'set -C; cat > "$1"' sh "$file" <<'EOF'
[Unit]
Description=Linux Factory systemctl state lab
[Service]
Type=oneshot
ExecStart=/usr/bin/true
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemd-analyze verify "$file"
sudo systemctl daemon-reload
sudo systemctl start "$unit"
systemctl is-active "$unit"
sudo systemctl enable "$unit"
systemctl is-enabled "$unit"
sudo systemctl stop "$unit"
systemctl is-active "$unit" || true
systemctl is-enabled "$unit"
sudo systemctl disable "$unit"
systemctl is-enabled "$unit" || true
)
Nach start ist die Einheit aktiv; nach enable ist sie aktiviert. Nach stop ist sie inaktiv, aber weiterhin aktiviert; nach disable ist sie deaktiviert. RemainAfterExit=yes hält diese Einmal-Einheit aktiv, ohne dass ein dauerhaft laufender Prozess nötig ist. Prüfen Sie vor der Bereinigung, dass die Datei noch die unveränderte Labordefinition enthält. Führen Sie anschließend sudo systemctl disable --now lf-systemctl-lab.service aus, entfernen Sie nur die hier erstellte Datei /etc/systemd/system/lf-systemctl-lab.service und führen Sie sudo systemctl daemon-reload aus. Wenn die Übung bei einem Fehler stoppt, prüfen und bereinigen Sie nur dasselbe Ziel.
Offizielle Dokumentation
Sie können das genaue Verhalten der Optionen und Unterschiede nach der Implementierung in der offiziellen Dokumentation zu systemctl überprüfen.




