gpt4 book ai didi

dbus - 使用gdbus启动systemd服务

转载 作者:行者123 更新时间:2023-12-02 01:08:32 35 4
gpt4 key购买 nike

我创建了一个新的 systemd 服务,我希望能够通过 dbus 调用激活该服务。该服务仅执行 shell 脚本。

我在这里定义了服务:

/lib/systemd/system/testamundo.service


[Unit]
Description=Testamundo

[Service]
Type=dbus
BusName=org.freedesktop.testamundo
ExecStart=/home/test/systemd/testamundo.sh

我还在这里为其定义了 D-Bus 服务:

/usr/share/dbus-1/system-services

[D-BUS Service]
Name=org.freedesktop.testamundo
Exec=/usr/sbin/console-kit-daemon --no-daemon
User=root
SystemdService=testamundo.service

我正在尝试使用 gdbus 启动它,这是我尝试使用的命令:

sudo gdbus call --system --dest org.freedesktop.systemd1 --object-path /org/freedesktop/systemd1 --method org.freedesktop.systemd1.StartUnit "org.freedesktop.testamundo"

如果我像上面那样使用 --system,命令会返回未知方法错误,如果我使用 --session,它会从子进程返回退出代码 1。当我使用--session 和--system 查看journalctl 时,我可以看到该命令,但除此之外没有其他信息。

感谢任何想法或建议,谢谢!

最佳答案

您的 dbus 命令正在使用不存在的接口(interface)。首先,它是 org.freedesktop.systemd1.Manager.Start 单元,而不是 org.freedesktop.systemd1.StartUnit。其次,org.freedesktop.systemd1.Manager.Start需要2个参数,服务名称和启动模式。引用:http://www.freedesktop.org/wiki/Software/systemd/dbus/

您已经定义了 dbus 服务,但您通过直接要求 systemd 激活该服务来绕过 dbus。其他注意的是,dbus 实际上向 systemd 发送信号而不是方法调用。

一切准备就绪,如果您只是对服务进行内省(introspection),它应该会被激活。

sudo gdbus call --system --dest org.freedesktop.testamundo --object-path /org/freedesktop/testamundo --method org.freedesktop.DBus.Introspectable. Introspect

关于dbus - 使用gdbus启动systemd服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31415665/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com