Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过python和dbus创建systemd瞬态计时器和服务(systemd运行方式)?_Python_Systemd_Dbus - Fatal编程技术网

如何通过python和dbus创建systemd瞬态计时器和服务(systemd运行方式)?

如何通过python和dbus创建systemd瞬态计时器和服务(systemd运行方式)?,python,systemd,dbus,Python,Systemd,Dbus,我想启动一个不存在的计时器,它应该在此时启动一个不存在的服务。这应该通过systemd瞬态单元(如systemd run)完成 当我执行以下代码时,我收到一个异常(见下文)。有人能告诉我,例外情况想告诉我什么吗 import dbus import time proxy = dbus.SystemBus().get_object("org.freedesktop.systemd1", "/org/freedesktop/systemd1") systemd = dbus.Interface(p

我想启动一个不存在的计时器,它应该在此时启动一个不存在的服务。这应该通过systemd瞬态单元(如systemd run)完成

当我执行以下代码时,我收到一个异常(见下文)。有人能告诉我,例外情况想告诉我什么吗

import dbus
import time

proxy = dbus.SystemBus().get_object("org.freedesktop.systemd1", "/org/freedesktop/systemd1")
systemd = dbus.Interface(proxy, dbus_interface="org.freedesktop.systemd1.Manager")
future = time.time() + 15
job = systemd.StartTransientUnit( \
    "bla-foo.timer", "replace", \
        [ \
            ("Description", "Bla Foo Timer"), \
            ("RemainAfterElapse", False), \
            ("OnCalendar", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(future))) \
        ], \
        [("bla-foo.service", \
            [ \
                ("Description", "Bla Foo Service"), \
                ("ExecStart", ("/usr/bin/python3", ["-c", "import os; print(os.getcwd())"], False)), \
                ("Type", "oneshot"), \
                ("WorkingDirectory", "/usr/lib") \
            ] \
        )] \
    )
print(job)
回溯(最近一次呼叫最后一次):
文件“/usr/lib/swmanager/preinstaller/test.py”,第19行,在
(“工作目录”,“/usr/lib”)\
文件“/usr/lib/python3.7/site packages/dbus/proxies.py”,第72行,在调用中__
返回self.\u proxy\u方法(*参数,**关键字)
文件“/usr/lib/python3.7/site packages/dbus/proxies.py”,第147行,在调用中__
**关键词)
文件“/usr/lib/python3.7/site packages/dbus/connection.py”,第653行,在call_blocking中
消息(超时)
dbus.exceptions.DBusException:System.Error.ENXIO:没有这样的设备或地址

问题是ExecStart参数的格式不正确

正确答案是:
(“ExecStart”、[(“/usr/bin/python3”、[“/usr/bin/python3”、“-c”、“导入操作系统;打印(os.getcwd())”]、True)],

完整的工作代码:

import dbus
import time

proxy = dbus.SystemBus().get_object("org.freedesktop.systemd1", "/org/freedesktop/systemd1")
systemd = dbus.Interface(proxy, dbus_interface="org.freedesktop.systemd1.Manager")
future = time.time() + 15
job = systemd.StartTransientUnit( \
    "bla-foo.timer", "replace", \
        [ \
            ("Description", "Bla Foo Timer"), \
            ("RemainAfterElapse", False), \
            ("OnCalendar", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(future))) \
        ], \
        [("bla-foo.service", \
            [ \
                ("Description", "Bla Foo Service"), \
                ("ExecStart", [("/usr/bin/python3", ["/usr/bin/python3", "-c", "import os; print(os.getcwd())"], True)]), \
                ("Type", "oneshot"), \
                ("WorkingDirectory", "/usr/lib") \
            ] \
        )] \
    )
print(job)
import dbus
import time

proxy = dbus.SystemBus().get_object("org.freedesktop.systemd1", "/org/freedesktop/systemd1")
systemd = dbus.Interface(proxy, dbus_interface="org.freedesktop.systemd1.Manager")
future = time.time() + 15
job = systemd.StartTransientUnit( \
    "bla-foo.timer", "replace", \
        [ \
            ("Description", "Bla Foo Timer"), \
            ("RemainAfterElapse", False), \
            ("OnCalendar", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(future))) \
        ], \
        [("bla-foo.service", \
            [ \
                ("Description", "Bla Foo Service"), \
                ("ExecStart", [("/usr/bin/python3", ["/usr/bin/python3", "-c", "import os; print(os.getcwd())"], True)]), \
                ("Type", "oneshot"), \
                ("WorkingDirectory", "/usr/lib") \
            ] \
        )] \
    )
print(job)