web-dev-qa-db-ja.com

python)を介してsystemdサービスを開始する

Python経由でsystemdサービスを開始/再起動する方法はありますか?

システムコールをかけることができることは知っていますが、シェルスクリプトでこれを書くこともできます...

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

Systemdにはいくつかのpythonバインドがあると聞きましたが、私が見た限りでは、それらはジャーナルのみをカバーしています

13

Systemdの DBus API を使用して、RestartUnitManagerメソッドを呼び出すことができます(十分な特権が必要です。そうでない場合は機能しません)

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')
14
Cilyan