Wie listet man alle laufenden Services von Systemctl auf?

Veröffentlicht 27. August 2024

Problem: Aktive Dienste in Linux anzeigen

Das Verwalten von Diensten auf einem Linux-System ist eine Aufgabe für Administratoren und Benutzer. Systemctl, der Hauptbefehl zur Steuerung von systemd, bietet eine Möglichkeit, diese Dienste zu verwalten und zu überwachen. Ohne die richtigen Befehle und Optionen kann es schwierig sein, einen Überblick über alle laufenden Dienste zu erhalten.

Alle laufenden Dienste mit Systemctl auflisten

Grundbefehl zum Auflisten von Diensten

Um alle von systemd verwalteten Dienste aufzulisten, verwenden Sie diesen Befehl:

systemctl list-units --type=service

Dieser Befehl zeigt eine Tabelle mit Informationen zu jeder Diensteinheit an. Die Ausgabe enthält:

  • UNIT: Der Name der Diensteinheit
  • LOAD: Ob die Einheitsdefinition geladen wurde
  • ACTIVE: Der übergeordnete Aktivierungsstatus der Einheit
  • SUB: Der untergeordnete Aktivierungsstatus der Einheit
  • DESCRIPTION: Eine kurze Beschreibung des Zwecks der Einheit

Um nur aktive Dienste anzuzeigen, fügen Sie die Option --state=active hinzu:

systemctl list-units --type=service --state=active

Filtern nach laufenden Diensten

Um nur die Dienste aufzulisten, die gerade laufen, verwenden Sie:

systemctl list-units --type=service --state=running

Dieser Befehl filtert inaktive oder fehlgeschlagene Dienste heraus und zeigt nur die an, die auf Ihrem System laufen.

Für eine kompaktere Ansicht verwenden Sie die Option --no-pager:

systemctl list-units --type=service --state=running --no-pager

Dies verhindert, dass die Ausgabe seitenweise angezeigt wird, was nützlich ist, wenn Sie die Ergebnisse an andere Befehle oder Dateien weiterleiten möchten.

Für einen schnellen Überblick über laufende Dienste ohne zusätzliche Details verwenden Sie:

systemctl list-units --type=service --state=running --plain --no-legend

Dieser Befehl entfernt die Kopf- und Fußzeileninformationen und liefert eine übersichtliche Liste der laufenden Dienste.

Um die Anzahl der laufenden Dienste zu zählen, leiten Sie die Ausgabe an wc weiter:

systemctl list-units --type=service --state=running --plain --no-legend | wc -l

Dieser Befehl gibt die Gesamtzahl der laufenden Dienste auf Ihrem System zurück.

Tipp: Laufende Dienste nach Speicherverbrauch sortieren

Um zu verstehen, welche Dienste die meisten Ressourcen verbrauchen, können Sie die laufenden Dienste nach Speicherverbrauch sortieren. Dies kann Systemadministratoren helfen, die Systemleistung zu optimieren.

Hier ist ein Befehl, um laufende Dienste sortiert nach Speicherverbrauch aufzulisten:

systemctl list-units --type=service --state=running --no-pager | awk '{print $1}' | xargs -I {} systemctl status {} | grep Memory | sort -rnk 3 | head -n 10

Dieser Befehl:

  1. Listet alle laufenden Dienste auf
  2. Extrahiert die Dienstnamen
  3. Ruft den Status jedes Dienstes ab
  4. Filtert nach der Zeile mit dem Speicherverbrauch
  5. Sortiert die Ergebnisse nach Speicherverbrauch (höchster zu niedrigster)
  6. Zeigt die 10 speicherintensivsten Dienste an

Die Ausgabe sieht so aus:

Memory: 1.2G
Memory: 800.5M
Memory: 456.3M
Memory: 234.1M
Memory: 189.7M
Memory: 156.2M
Memory: 98.4M
Memory: 76.9M
Memory: 54.3M
Memory: 43.8M

Erweiterte Systemctl-Befehle für die Dienstverwaltung

Anzeigen detaillierter Dienstinformationen

Um mehr Informationen über einen Dienst zu erhalten, verwenden Sie den Befehl systemctl status gefolgt vom Dienstnamen:

systemctl status dienstname

Dieser Befehl liefert einen Überblick über den Dienst, einschließlich:

  • Aktueller Status (aktiv, inaktiv, fehlgeschlagen)
  • Haupt-PID (Prozess-ID)
  • Speicherverbrauch
  • CPU-Auslastung
  • Startzeit
  • Aktuelle Logeinträge

Beispiel: SSH-Dienstdetails anzeigen

systemctl status sshd

Die Ausgabe enthält den aktuellen Status des Dienstes, den Speicherort der Konfigurationsdatei und aktuelle Logeinträge, die bei der Fehlerbehebung helfen.

Überprüfen des Dienststatus

Um den Status eines Dienstes zu überprüfen, verwenden Sie:

systemctl is-active dienstname

Dieser Befehl gibt "active" zurück, wenn der Dienst läuft, oder "inactive", wenn nicht.

Um zu überprüfen, ob ein Dienst beim Systemstart startet:

systemctl is-enabled dienstname

Dies gibt "enabled" zurück, wenn der Dienst automatisch beim Booten startet, oder "disabled", wenn nicht.

Sie können auch den Befehl systemctl show verwenden, um bestimmte Eigenschaften eines Dienstes zu erhalten:

systemctl show -p ActiveState dienstname
systemctl show -p UnitFileState dienstname

Diese Befehle zeigen den aktuellen aktiven Status und ob der Dienst aktiviert ist.

Um alle fehlgeschlagenen Dienste aufzulisten:

systemctl --failed --type=service

Dieser Befehl hilft, Dienste zu identifizieren, die Probleme haben und möglicherweise Aufmerksamkeit benötigen.

Alternative Methoden zum Auflisten von Diensten

Verwendung des PS-Befehls

Der ps-Befehl bietet eine weitere Möglichkeit, laufende Dienste in Linux aufzulisten. Obwohl er nicht so detailliert ist wie systemctl, kann er einen schnellen Überblick über aktive Prozesse, einschließlich Dienste, geben.

Um alle laufenden Prozesse einschließlich Dienste aufzulisten:

ps aux

Dieser Befehl zeigt alle Prozesse für alle Benutzer in einem detaillierten Format an. Um nach bestimmten Diensten zu filtern, können Sie grep verwenden:

ps aux | grep dienstname

Für eine fokussierte Ansicht der Dienste können Sie verwenden:

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

Dieser Befehl zeigt die Prozess-ID, die übergeordnete Prozess-ID, den Befehl, den Speicherverbrauch und die CPU-Auslastung an, sortiert nach Speicherverbrauch.

Im Vergleich zu systemctl bietet ps:

  • Echtzeit-Prozessinformationen
  • Detailliertere Ressourcennutzungsdaten
  • Die Möglichkeit, nicht von systemd verwaltete Prozesse zu sehen

Allerdings fehlen systemd-spezifische Informationen wie Dienststatus und Abhängigkeiten.

Tipp: Angepasste PS-Ausgabe

Sie können die ps-Ausgabe anpassen, um nur die Informationen anzuzeigen, die Sie benötigen. Um beispielsweise nur die PID, den Befehlsnamen und den Speicherverbrauch von Prozessen anzuzeigen, verwenden Sie:

ps -eo pid,comm,%mem --sort=-%mem | head

Dieser Befehl sortiert die Prozesse nach Speicherverbrauch und zeigt die 10 speicherintensivsten Prozesse an.

Verwendung des Top-Befehls

Der top-Befehl gibt eine dynamische Echtzeitansicht der laufenden Prozesse, einschließlich Dienste. Um top zu verwenden:

top

Dies öffnet eine interaktive Anzeige mit:

  • Systemübersicht (Laufzeit, Durchschnittslast, CPU-Auslastung)
  • Prozessliste (standardmäßig nach CPU-Auslastung sortiert)

Um sich auf Dienste zu konzentrieren, können Sie verwenden:

top -c -p $(pgrep -d',' -f dienstname)

Dieser Befehl zeigt nur die Prozesse an, die mit dem angegebenen Dienst zusammenhängen.

Vorteile der Verwendung von top:

  • Echtzeit-Updates von System- und Prozessinformationen
  • Interaktive Oberfläche zum Sortieren und Filtern
  • Möglichkeit, Ressourcennutzungstrends im Laufe der Zeit zu sehen

Zu den Einschränkungen gehören:

  • Weniger dienstspezifische Informationen im Vergleich zu systemctl
  • Kann mehr Systemressourcen für kontinuierliche Überwachung erfordern

Sowohl ps als auch top ergänzen systemctl, indem sie verschiedene Ansichten laufender Dienste und Prozesse bieten und so ein besseres Verständnis der Systemaktivität ermöglichen.

Beispiel: Apache-Webserver überwachen

Um den Apache-Webserver mit top zu überwachen, können Sie folgenden Befehl verwenden:

top -c -p $(pgrep -d',' -f apache2)

Dieser Befehl zeigt Echtzeitinformationen über alle Apache-Prozesse an, einschließlich ihrer CPU- und Speicherauslastung. Dies ist nützlich, um den Ressourcenverbrauch von Apache während Zeiten hohen Datenverkehrs zu verfolgen.