Verfolgen Sie das Ergebnis des startUnit-Dbus-Aufrufs an systemdLinux

Linux verstehen
Guest
 Verfolgen Sie das Ergebnis des startUnit-Dbus-Aufrufs an systemd

Post by Guest »

Kontext

Ich entwickle eine Anwendung, die Dbus-Aufrufe ausführt, um Systemd-Einheiten zu verwalten.
Um eine Vorstellung von den Aufrufen zu bekommen, schreibe ich ein kleines Shell-Skript das sollte eine ausgefallene Einheit wie systemctl:
erkennen

Code: Select all

user$ systemctl --user start error-out.service
Job for error-out.service failed because ...

Was ich versucht habe

Wie man eine Systemd-Einheit startet, finden Sie unter Verwenden von gdbus zum Starten eines Systemd-Dienstes. Es funktioniert mit StartUnit wie folgt:

Code: Select all

user$ dbus-send --session --print-reply --dest=org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager.StartUnit string:"error-out.service" string:"fail"

method return time=1736951345.318505 sender=:1.0 -> destination=:1.5481 serial=21872 reply_serial=2
object path "/org/freedesktop/systemd1/job/63442"
Optionen für diesen Aufruf werden in Die D-Bus-Schnittstelle von systemd erläutert, aber dieses Dokument enthält überhaupt keine Beispiele. Was mir Probleme bereitet, ist, den Status des erstellten Jobs abzurufen. In den Dokumenten heißt es:

Dies kann auf rennfreie Weise erreicht werden, indem man zuerst das Signal JobRemoved() abonniert, dann StartUnit() aufruft und verwendet zurückgegebenes Jobobjekt, um nicht verwandte JobRemoved()-Signale herauszufiltern, bis das gewünschte Signal empfangen wird, das dann das Ergebnis der Startoperation trägt

Ich verstehe was ich tun sollte, aber wie das geht, ist mir ziemlich unklar, selbst nachdem ich gegoogelt und die relevanten Teile des systemctl-Quellcodes gelesen habe.

Frage

Wie kann überwacht werden, ob eine Systemd-Einheit ausgefallen ist, wenn die Einheit über die Dbus-Schnittstelle gestartet wird?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post