通过python启用系统服务

问题描述

根据Starting a systemd service via python,我可以使用D-Bus API来启动/停止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('sshd.service','fail')

但是,如果我想在那里启用systemd服务,该怎么办?我已经尝试用RestartUnit替换Enableunit,但是得到了:

dbus.exceptions.DBusException: org.freedesktop.DBus.Error.UnkNownMethod: UnkNown method Enableunit or interface org.freedesktop.systemd1.Manager.

解决方法

好。我想通了,这要归功于Terry Spotts。

job = manager.EnableUnitFiles(['ssh.service'],False,True)
manager.Reload()

第一个参数是系统单位文件名称的列表。

第二个参数是一个布尔值,用于控制该单元是应仅在运行时启用(true,/ run)还是在持久状态(false,/ etc)启用。

第三个参数是一个布尔值,用于控制是否在必要时替换指向其他单元的符号链接。