簡體   English   中英

通過 python 和 dbus 啟動用戶 systemd 服務

[英]Starting a users systemd service via python and dbus

可以通過 dbus 使用 systemd 的管理器來控制服務,例如:使用以下命令通過 python 啟動 systemd 服務

import dbus
sysbus = dbus.SystemBus()
systemd1 = sysbus.get_object('org.freedesktop.systemd1',     '/org/freedesktop/systemd1')
manager = dbus.Interface(systemd1, 'org.freedesktop.systemd1.Manager')
job = manager.RestartUnit('test.service', 'fail')

但是,systemd 也可以使用--user標志處理用戶的服務文件,例如:

systemctl --user start test.service

如何從 dbus(使用 python)使用用戶的管理器? dbus.Bus()dbus.SessionBus() dbus.SystemBus()沒有解決問題,因為這給出了:

dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildExited: Process org.freedesktop.systemd1 exited with status 1

根據dbus-python 教程,dbus.SessionBus() 是連接到會話總線的正確方法

根據顯示的錯誤消息,我懷疑 dbus 和/或您的會話存在其他問題。 例如,當嘗試在沒有有效會話的情況下進行連接時,我得到一個略有不同的異常,org.freedesktop.DBus.Error.NotSupported

我會檢查 systemd 日志以獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM