Linux systemctl: Dienste überprüfen und verwalten

systemctl ist ein Befehl, um den Status von Diensten und anderen von systemd verwalteten Einheiten zu überprüfen, sie zu starten oder zu stoppen und festzulegen, ob sie beim Booten aktiviert sind. Der aktuelle Betriebsstatus und der beim Booten aktivierte Status sind unterschiedlich, daher muss jeder separat überprüft werden.

Vor dem Starten

systemd ist der System- und Dienstemanager für Linux, und die von ihm verwalteten Einheiten umfassen nicht nur Dienste (.service), sondern auch Timer und Sockets. Dieser Artikel erklärt, wie man Systemdienste auf Linux mit systemd verwaltet. Er kann nicht unverändert in Umgebungen mit anderen Initialisierungssystemen oder dort verwendet werden, wo systemd nicht läuft. Für detaillierte Befehle siehe das offizielle systemctl-Handbuch.

Das folgende apache2.service ist ein Beispiel, wenn Apache auf Ubuntu installiert ist. Wenn es nicht installiert ist, kann die Einheit nicht gefunden werden, und der Name kann je nach Distribution variieren. Überprüfen Sie vor dem Üben den tatsächlichen Servicenamen, und da das Anhalten eines laufenden Webservers oder eines Remote-Access-Dienstes Ihre Verbindung trennen kann, verwenden Sie eine sichere Testumgebung. Den Status zu überprüfen ist oft als regulärer Benutzer möglich, aber das Ändern von Systemdiensten erfordert normalerweise Administratorrechte.

Überprüfen des Dienststatus und -namens

Überprüfen Sie die aktuell geladenen Dienste und die installierten Service-Unit-Dateien getrennt. Die beiden Listen haben unterschiedliche Kriterien, daher können sich die Ergebnisse unterscheiden.

systemctl list-units --type=service --all
systemctl list-unit-files --type=service

Das erste zeigt Dienste, die in systemd geladen sind, einschließlich inaktiver Einheiten. Das zweite zeigt installierte Service-Einheitsdateien und deren Aktivierungsstatus, was auch nützlich ist, um Dienste zu finden, die noch nicht geladen wurden. Wenn die Liste lang ist und der Pager geöffnet wird, drücken Sie q, um zu beenden.

Zum Beispiel, um den Status und die letzten Protokolle des Apache-Dienstes zu überprüfen, geben Sie Folgendes ein.

systemctl status apache2.service
systemctl is-active apache2.service
systemctl is-enabled apache2.service

In status-Ausgabe bedeutet Active: active (running), dass der Dienst derzeit läuft, inactive bedeutet inaktiv, und failed bedeutet fehlgeschlagen. Detaillierte Zustände variieren je nach Diensttyp. is-active überprüft den aktuellen Status, und is-enabled überprüft den Aktivierungsstatus. static-Einheiten können nicht auf übliche Weise aktiviert werden, können aber von anderen Einheiten gestartet werden.

Dienst starten, stoppen, neu starten

Die folgenden Befehle ändern tatsächlich den Dienststatus. Ersetzen Sie den Beispiel-Dienstnamen durch den für Ihr System geeigneten Namen und stellen Sie sicher, dass das Anhalten des Dienstes akzeptabel ist, bevor Sie ausführen.

sudo systemctl start apache2.service
sudo systemctl stop apache2.service
sudo systemctl restart apache2.service

start startet den Dienst, und stop stoppt ihn. restart stoppt den Dienst und startet ihn dann neu, und es kann einen gestoppten Dienst starten. Führen Sie nur den erforderlichen Befehl aus. Überprüfen Sie nach jeder Operation das Ergebnis mit systemctl status apache2.service. Selbst bei bereits laufenden Diensten können Verbindungen während eines Neustarts vorübergehend unterbrochen werden.

Wenn der Dienst das Neuladen seiner eigenen Einstellungen unterstützt, können Sie die Einstellungen mit sudo systemctl reload apache2.service erneut anwenden. Die Unterstützung und die Anwendungsweise variieren bei jedem Dienst. Neuladen und Neustart sind nicht dieselbe Aktion, und wie die Einstellungen überprüft werden, sollte der Dokumentation des Dienstes folgen.

Aktivierung beim Booten und aktueller Betriebsstatus

Die folgenden Befehle konfigurieren oder entfernen die Verbindung, sodass Einheiten während des Bootvorgangs starten usw. Allein das Ausführen von enable startet nichts sofort, und allein das Ausführen von disable stoppt Dienste, die bereits laufen, nicht sofort.

sudo systemctl enable apache2.service
sudo systemctl disable apache2.service
systemctl is-enabled apache2.service

Wählen Sie nur die notwendigen Befehle aus und führen Sie diese aus, und überprüfen Sie die Ergebnisse mit dem letzten Befehl. enabled bedeutet aktiviert und disabled deaktiviert. Dienste können jedoch weiterhin aufgrund von Abhängigkeiten von anderen Einheiten oder Sockets/Timern gestartet werden, daher sollte disable nicht als Blockierung aller Startpfade interpretiert werden.

Um sofort zu aktivieren und zu starten, verwenden Sie sudo systemctl enable --now apache2.service; um sofort zu deaktivieren und zu stoppen, verwenden Sie sudo systemctl disable --now apache2.service. Überprüfen Sie die Wirkung jedes Befehls und üben Sie nur in einer Testumgebung.

Was zu überprüfen ist, wenn Probleme auftreten

Überprüfen Sie die Liste der fehlgeschlagenen Einheiten und die aktuellen Protokolle bestimmter Dienste. Logs können sensible Informationen enthalten, daher sollten Sie den Inhalt vor dem Teilen überprüfen.

systemctl --failed
sudo journalctl -u apache2.service -n 50 --no-pager

Wenn der Dienst nicht gefunden werden kann, überprüfen Sie seinen Namen und ob er installiert ist. Wenn das Starten fehlschlägt, überprüfen Sie status und die Protokolle auf Konfigurationsfehler, abhängige Dienste, Portkonflikte oder Berechtigungsprobleme. Der masked-Status zeigt an, dass das Starten blockiert ist, also heben Sie die Maskierung nicht ohne Klärung der Ursache auf. Die Nachrichten und Lösungen können je nach Distribution und Dienstkonfiguration variieren.

Wenn Sie die Einheitsdatei geändert haben

Wenn Sie die systemd-Einheitsdatei oder Drop-in-Konfiguration geändert haben, verwenden Sie den folgenden Befehl, um systemd die Einheitsdefinitionen erneut einlesen zu lassen.

sudo systemctl daemon-reload

Dieser Befehl startet den Dienst selbst nicht neu und veranlasst den Dienst auch nicht, seine Konfigurationsdateien neu zu laden. Wenn Sie die Änderungen auf einen laufenden Dienst anwenden müssen, kann ein separater Neustart oder ein Reload, der für den Dienst und die Änderungen geeignet ist, erforderlich sein. Sichern Sie die Konfiguration vor Änderungen und stellen Sie sicher, dass Sie wissen, wie Sie zum ursprünglichen Zustand zurückkehren können.