Dienste und Prozessüberwachung

Veröffentlicht am:

Die wichtigsten Befehle zum Merken

  • systemctl status UNIT — den aktuellen Zustand eines Dienstes untersuchen.
  • journalctl -u UNIT — Journaleinträge zu diesem Dienst lesen.

Befehle und Optionen

Diese Befehle kommen im kurzen Beispiel unten vor.

Befehl oder Option Bedeutung
systemctl status systemd-journald.service --no-pager Den aktuellen Zustand des Journaldienstes direkt im Terminal anzeigen. --no-pager vermeidet ein interaktives Anzeigeprogramm.
journalctl -u systemd-journald.service -n 10 --no-pager -u wählt die Unit; -n 10 zeigt ihre letzten zehn verfügbaren Einträge.

UNIT steht für einen systemd-Unit-Namen. Wir untersuchen hier systemd-journald.service, den Journaldienst von Ubuntu. Die Befehle stoppen ihn nicht und ändern seine Konfiguration nicht.

Die entscheidenden Konzepte

1. Ein Dienst hat eine verwaltete Identität über einen Prozess hinaus

Ein Dienst stellt eine Funktion bereit, häufig im Hintergrund. Sein Anwendungscode läuft in einem oder mehreren Prozessen. Ein Dienstmanager startet und stoppt ihn; Ubuntu verwendet dafür normalerweise systemd.

Systemd beschreibt einen Dienst durch eine benannte Unit, meist mit der Endung .service. Der Name identifiziert das verwaltete Objekt. Dessen aktueller Hauptprozess hat eine PID, die sich beim Start eines Ersatzprozesses normalerweise ändert. Der Unit-Name kann dabei gleich bleiben.

2. Überwachung folgt einer Richtlinie

Ein Supervisor beobachtet den Prozesslebenszyklus und kann auf das Ende reagieren. Eine konfigurierte Neustartrichtlinie kann nach einem Fehler einen Ersatzprozess starten. Nicht jeder Dienst wird nach jedem Ende automatisch neu gestartet.

Ein Neustart kann ein vorübergehendes Problem beheben. Wiederholte Fehler können aber eine Absturzschleife erzeugen. Eine neue PID beweist nicht, dass die Ursache behoben wurde. Neustartverzögerungen und Startbegrenzungen helfen, wiederholte Versuche zu kontrollieren.

Ein bewusstes Stoppen über den Dienstmanager unterscheidet sich vom direkten Beenden einer PID. Letzteres kann je nach Richtlinie einen Ersatz auslösen. Nutze den Dienstmanager, wenn du den Dienst selbst stoppen möchtest.

3. Jetzt laufen und beim Booten starten sind unterschiedliche Dinge

Im Dienststatus bedeutet active, dass der Dienst jetzt läuft. Enabled bedeutet normalerweise, dass systemd ihn automatisch startet, wenn das System beim Booten eine bestimmte Phase erreicht. Einen Dienst zu aktivieren startet ihn nicht zwingend sofort. Ihn jetzt zu starten richtet dagegen keinen automatischen Start bei künftigen Boots ein.

Disabled bedeutet nicht, dass ein Dienst nicht laufen darf. Es bedeutet, dass er nicht über seine üblichen Enablement-Links zum automatischen Start eingerichtet ist. Er kann trotzdem laufen, weil ein Benutzer, eine andere Unit, ein Timer oder ein Socket ihn gestartet hat. Static bedeutet, dass die Unit nicht selbst aktiviert werden kann; eine andere Unit kann sie weiterhin als Abhängigkeit starten.

Auch active (running) ist kein Anwendungstest. Der Prozess könnte unbegrenzt warten oder Anfragen fehlerhaft bearbeiten. Manche erfolgreichen einmaligen Dienste zeigen active (exited), obwohl kein dauerhafter Prozess läuft.

4. Der Status zeigt jetzt; Logs erklären den Ablauf

systemctl status verbindet den aktuellen Zustand mit einem kleinen aktuellen Log-Ausschnitt. journalctl zeigt aufgezeichnete Ereignisse zur Unit, darunter Startmeldungen und Fehler.

Lies Zeitstempel und Meldungen in ihrer Reihenfolge. Ein Anwendungsfehler vor dem Neustart erklärt möglicherweise mehr als der jetzt laufende Ersatzprozess. journalctl zeigt nur Einträge, die aufgezeichnet, aufbewahrt, von deinen Filtern erfasst und für dein Benutzerkonto sichtbar sind. Eine leere Ausgabe kann deshalb bedeuten, dass kein passendes Ereignis protokolliert wurde, ältere Einträge gelöscht wurden oder dir die Leseberechtigung fehlt.

Ein kleines Beispiel

Optional: Führe diese Befehle auf einer Ubuntu-VM mit systemd aus:

systemctl status systemd-journald.service --no-pager
journalctl -u systemd-journald.service -n 10 --no-pager

Suche im Status den Unit-Namen, Loaded, den Active-Zustand und gegebenenfalls Main PID. Loaded beschreibt die Unit-Definition und kann einen Aktivierungsstatus wie static enthalten. Die PID gehört zum aktuellen Hauptprozess, nicht zur dauerhaften Identität des Dienstes.

Lies anschließend Zeitstempel und Journalmeldungen. Das sind Einträge zum Journaldienst selbst, nicht alle von ihm gesammelten Anwendungslogs. Zustände, PIDs und Meldungen variieren. Bei einem inaktiven Dienst kann der Statusbefehl einen Rückgabewert ungleich null liefern. Ein Berechtigungshinweis oder fehlende Einträge können auf eingeschränkten Journalzugriff zurückgehen.

Das Beispiel beobachtet einen vorhandenen Dienst. Es erstellt keine Unit, löst keinen Neustart aus und benötigt kein Aufräumen.

Merke dir: Verwalte den Dienst über seinen Unit-Namen, prüfe seinen aktuellen Zustand und nutze Logs, um den Weg dorthin zu verstehen.