组件无法启动怎样排查原因问题分析
更新时间: 2026/06/03
在Gitcode上查看源码问题背景
- 单板类型:NA
- 软件版本:NA
- 涉及功能:组件启动,HealthCheck,D-Bus 通信,MACA 健康检查
- 触发条件:自己创建的组件在启动时,D-Bus 健康检查无响应。
- 业务表现:预期自定义组件正常启动并注册到 D-Bus;实际组件无法启动,framework.log 中报 HealthCheck failed,错误为 org.freedesktop.DBus.Error.NoReply: Did not receive a reply。
问题复现步骤
- 创建自定义组件并配置启动。
- 重启 BMC 或手动触发组件启动。
- 查看 framework.log,出现 HealthCheck failed 报错。
- 查看 app.log,未看到组件相关的报错打印。
关键日志信息
framework.log 中 HealthCheck 报错:
text
HealthCheck failed, error: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.重启服务后提示报错(缺少 .service files):
手动调用健康检查同样报错:
bash
busctl --user call bmc.kepler.yctco_app /bmc/kepler/yctco_app/MicroComponent bmc.kepler.MicroComponent HealthCheck a{ss} 0main.lua 中添加的调试打印均未输出:
定位过程
- 尝试在环境上手动调用 D-Bus 健康检查方法(busctl call),观察是否有具体报错提示。
- 重启服务后,报错提示缺少 .service files,且 main.lua 中服务入口日志没有打印,判断组件启动配置不正确。
- 分析原因:组件如果是独立进程,需要在 /etc/systemd/system 目录下有 .service 文件,并在 /etc/systemd/system/multi-user.target.wants 下创建软链接,同时在 manifest 仓库的 launch_control.json 中增加启动项。如果是属于某个进程下的组件,service.json 中 deployConfig 字段应填写对应进程的 service 文件名(如 framework.service),并在 launch_control.json 中对应进程的 components 字段中新增组件。
- 在 main.lua 中使用 pcall 包裹 require xxx_app 调用,查看是否有加载报错。
- 建议将 logging require 放到文件最前面,使用 logging:error_easy() 打印调试信息(防止日志被限流),在其他 require 前后加上适量打印,使用 pcall 包裹可疑函数打印异常信息。
问题原因
组件启动配置不正确:缺少对应的 .service 文件、软链接或 launch_control.json 配置,导致 D-Bus 服务未注册,MACA 健康检查失败。