组件无法启动怎样排查原因问题分析
更新时间: 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。

问题复现步骤

  1. 创建自定义组件并配置启动。
  2. 重启 BMC 或手动触发组件启动。
  3. 查看 framework.log,出现 HealthCheck failed 报错。
  4. 查看 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} 0

main.lua 中添加的调试打印均未输出:

定位过程

  1. 尝试在环境上手动调用 D-Bus 健康检查方法(busctl call),观察是否有具体报错提示。
  2. 重启服务后,报错提示缺少 .service files,且 main.lua 中服务入口日志没有打印,判断组件启动配置不正确。
  3. 分析原因:组件如果是独立进程,需要在 /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 字段中新增组件。
  4. 在 main.lua 中使用 pcall 包裹 require xxx_app 调用,查看是否有加载报错。
  5. 建议将 logging require 放到文件最前面,使用 logging:error_easy() 打印调试信息(防止日志被限流),在其他 require 前后加上适量打印,使用 pcall 包裹可疑函数打印异常信息。

问题原因

组件启动配置不正确:缺少对应的 .service 文件、软链接或 launch_control.json 配置,导致 D-Bus 服务未注册,MACA 健康检查失败。

解决方案

  1. 确认组件是独立进程还是子组件,根据情况在 /etc/systemd/system 目录下配置对应的 .service 文件及软链接。
  2. 在 manifest 仓库的 launch_control.json 中正确配置启动项。
  3. 参考组件创建文档和组件启动配置文档:组件的创建和使用组件启动配置
  4. 调试阶段使用 pcall 包裹 require 调用、使用 logging:error_easy() 打印日志排查具体加载错误。