繁体   English   中英

从Python启动systemd计时器

[英]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 (主要电话似乎是UnitNewJobNew 。)

我承认,这对我来说似乎相当复杂,如果已经存在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM