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"
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.