[英]Start systemd timer from Python
我正在尝试从python启动dbus计时器。
目前,我可以通过以下脚本启动它:
import dbus
from subprocess import call
def scheduleWall( time, message ):
call(['systemd-run --on-active='+str(time) +' --unit=scheduled-message --description="'+ message +'" wall "'+ message +'"'], shell=True)
我不想使用“通话”,但尝试使用“ StartTransientUnit”,但是我根本无法理解通话的格式! 我是dbus和python的新手。
def scheduleWall( time, message ):
try:
bus = dbus.SystemBus()
systemd1 = bus.get_object("org.freedesktop.systemd1"," /org/freedesktop/systemd1")
manager = dbus.Interface(systemd1, 'org.freedesktop.systemd1.Manager')
obj = manager.StartTransientUnit('scheduled-message.timer','fail',[????],[????])
except:
pass
startTransientUnit是正确的调用方法吗? 我应该怎么称呼它?
TL; DR:坚持使用systemd-run
:)
我不认为StartTransientUnit
是相当正确的方法-你需要创建两个短暂的单位,毕竟:定时器单元,以及服务单位,它会启动(这将运行wall
后)。 也许您可以将StartTransientUnit
用于计时器,但至少不能用于服务。 您还需要设置两个单位需要的所有属性( OnActiveSec=
定时器, ExecStart=
的服务,可能是一些更...) -你可以看到如何systemd-run
运行做它busctl monitor org.freedesktop.systemd1
然后执行systemctl run --on-active 1s /bin/true
在另一个终端上systemctl run --on-active 1s /bin/true
。 (主要电话似乎是UnitNew
和JobNew
。)
我承认,这对我来说似乎相当复杂,如果已经存在systemd-run
为您完成这项工作,为什么不使用它呢? 我唯一要做的更改是消除外壳部分,并传递一个参数数组,而不是一个用空格分隔的字符串,并带有如下所示(未经测试):
subprocess.run(['systemd-run', '--on-active', str(time), ' --unit', 'scheduled-message', '--description', message, 'wall', message)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.