Контекст
Я разрабатываю приложение, которое выполняет вызовы dbus для управления модулями systemd.Чтобы получить представление о вызовах, я пишу небольшой сценарий оболочки это должно обнаружить неисправный модуль, например systemctl:
Код: Выделить всё
user$ systemctl --user start error-out.service
Job for error-out.service failed because ...
Что я пробовал
Как запустить модуль systemd, можно найти в разделе Использование gdbus для запуска службы systemd. Используя StartUnit, это работает следующим образом:Код: Выделить всё
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"
Этого можно добиться без гонок, сначала подписавшись на сигнал JobRemoved(), затем вызвав StartUnit() и используя метод возвращенный объект задания для фильтрации несвязанных сигналов JobRemoved() до тех пор, пока не будет получен нужный, который затем будет содержать результат операции запуска
Я понимаю что мне следует делать, но как это сделать, мне довольно неясно, даже после поиска в Google и чтения соответствующих частей исходного кода systemctl.
Вопрос
Как отслеживать сбой модуля systemd при запуске модуля через интерфейс dbus?Подробнее здесь: https://stackoverflow.com/questions/793 ... to-systemd
Мобильная версия