通过D-Bus调用方法失败:应用需D-Bus启动时遇接口未实现错误
D-Bus按需启动服务时调用失败问题
场景概述
- 使用Go语言开发两个通过D-Bus通信的应用:
- App #1:作为后台服务运行,按需启动(非开机自启)
- App #2:通过D-Bus调用App #1提供的方法
异常现象(两应用均未运行时)
- App #2发起对App #1的D-Bus方法调用
- D-Bus通过对应的systemd .service文件启动App #1
- App #2调用失败,返回错误:
Object does not implement the interface 'com.mycompany.sysupdate'
- 补充验证:
- 重启App #2后可正常调用(此时App #1已在后台运行)
- 使用
dbus-send工具也能复现该问题:需要启动App #1时调用失败,App #1运行后调用正常
相关配置文件
systemd服务文件(sysupdate.service)
[Unit] Description=system update (sysupdate) Requires=dbus.socket After=dbus.socket [Service] Type=notify ExecStart=/sbin/sysupdate [Install] WantedBy=multi-user.target
- 备注:App #1完成D-Bus更新接口注册后,会调用
SdNotify("READY=1"),告知systemd服务已就绪 - 曾尝试修改Service配置:将
Type改为dbus并添加BusName=com.mycompany.sysupdate,问题依旧
D-Bus服务文件(/usr/share/dbus-1/system-services/com.mycompany.sysupdate.service)
[D-BUS Service] Name=com.mycompany.sysupdate Exec=false User=root SystemdService=sysupdate.service
疑问
原本预期D-Bus会在调用方法前等待App #1完全启动并就绪,请问是否遗漏了关键配置要点?
内容的提问来源于stack exchange,提问作者A.G.
相关产品推荐
相关产品推荐

