使用gdbus启动systemd服务

7

我创建了一个新的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,命令会返回"Unknown Method"错误;如果我使用--session,则子进程将返回退出码1。当我使用--session和--system查看journalctl时,可以看到命令,但除此之外没有其他信息。
感谢任何想法或建议,谢谢!
1个回答

5
您的DBus命令使用了不存在的接口。首先,正确的单元是org.freedesktop.systemd1.Manager.Start而不是org.freedesktop.systemd1.StartUnit。其次,org.freedesktop.systemd1.Manager.Start需要两个参数:服务名称和启动模式。参考:http://www.freedesktop.org/wiki/Software/systemd/dbus/ 您已经定义了一个DBus服务,但是您绕过了DBus直接请求systemd激活该服务。另一个注意点是,DBus实际上向systemd发送的是信号而不是方法调用。
如果您对服务进行内省,一切都已经准备就绪,它应该被激活。
sudo gdbus call --system --dest org.freedesktop.testamundo --object-path /org/freedesktop/testamundo --method org.freedesktop.DBus.Introspectable. Introspect

再次感谢您,Umut,这个回复和您的其他回复都是非常有帮助的! - RandomUser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接