首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gdbus启动systemd服务

使用gdbus启动systemd服务
EN

Stack Overflow用户
提问于 2015-07-14 19:30:30
回答 1查看 6.9K关注 0票数 7

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

我在这里定义了服务:

代码语言:javascript
复制
/lib/systemd/system/testamundo.service


[Unit]
Description=Testamundo

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

我还为它定义了一个D总线服务:

代码语言:javascript
复制
/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启动它,这是我试图使用的命令:

代码语言:javascript
复制
sudo gdbus call --system --dest org.freedesktop.systemd1 --object-path /org/freedesktop/systemd1 --method org.freedesktop.systemd1.StartUnit "org.freedesktop.testamundo"

如果我像上面一样使用--system,命令返回一个未知的方法错误,如果我使用--会话,它将返回子进程的退出代码1。当我使用-会话和-系统查看日志时,我可以看到命令,但除此之外没有其他信息。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-30 13:39:50

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

您已经定义了dbus服务,但是您通过直接请求systemd激活服务来绕过dbus。另一个注意事项是,dbus实际上向systemd发送信号,而不是方法调用。

你已经准备好了一切,如果你只是对你的服务进行反省,它就应该被激活。

代码语言:javascript
复制
sudo gdbus call --system --dest org.freedesktop.testamundo --object-path /org/freedesktop/testamundo --method org.freedesktop.DBus.Introspectable. Introspect
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31415665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档