通过Python启动systemd服务

25

有没有一种通过Python启动/重新启动systemd服务的方法?

我知道我可以进行系统调用 - 但是那样的话我也可以用shell脚本来编写它。

from subprocess import call
call(["systemctl", "restart service"])

我听说systemd有一些Python绑定,但就我所见,它们只涵盖了journal。


所以你正在寻找一个systemd模块/包吗? - Remi Guan
我吗?好的,我想尽可能直接地与systemd交互。如果有更直接的方式,我不想退出Python环境并请求系统为我执行,难道没有某种API可以让我与systemd通信吗? - Maximilian Kindshofer
1
现在明白了,以更Pythonic的方式运行systemd命令。 :P - Remi Guan
这些是日志的绑定 - 这样Python就可以写入日志了。 - Maximilian Kindshofer
1
Systemd还具有DBus API - Cilyan
显示剩余4条评论
1个回答

31
你可以使用systemd的DBus API来调用ManagerRestartUnit方法(需要足够的权限,否则无法工作)。
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('sshd.service', 'fail')

我在这里发布了一个类似的后续问题:通过Python和DBus启动用户systemd服务 - sebix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接