Systemd 服务诊断
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md 的指引,安装 @user_3c6cb52e/systemd-service-diagnostics 到你的 AI 助手中。
技能介绍
问题:服务挂了,但没人说得清为什么
systemctl start 失败、进程在重启循环里反复横跳、systemctl status 只给出一句 failed 却没有任何有效线索——这类场景在运维现场并不少见。传统排查要手动翻 journalctl、逐行 grep,再打开 unit 文件逐行对照配置,往往半小时过去才定位到一个 Type=notify 配错,或者 After= 依赖顺序颠倒。
技能如何工作
这个技能把上述排查流程拆成三个可重复的步骤:
- 结构化日志提取:通过
journalctl -u <unit> -o json拿到结构化 JSON 输出,而不是对纯文本做正则匹配,便于直接读取EXIT_CODE、CODE_FILE等关键字段。 - 单元属性核对:用
systemctl show <unit>拉取实际生效的 unit 属性(如ExecStart、Restart、TimeoutStopSec),与预期配置做比对。 - 配置与依赖校验:调用
systemd-analyze verify检查 unit 文件的语法与引用错误,再用systemd-analyze dot生成依赖图,识别 ordering 问题。
能力边界与注意事项
它不是一个自动修复工具。诊断结果指向根因之后,修改 unit 文件、重启服务、处理文件权限或网络依赖仍然需要人工介入。systemd-analyze verify 对已加载的 unit 与磁盘上的文件可能给出不同结论;dot 输出的依赖图在复杂的 Wants / After 组合下需要人工判读。另外,journalctl 能查到的历史深度受 journald 的存储轮转策略限制,过早的记录可能已经不存在。
使用场景
- 服务启动即失败或反复重启,需要从 journalctl JSON 日志中提取退出码定位根因
- unit 文件经过修改后服务异常,需要用 systemd-analyze verify 校验语法与引用问题
- 多个 systemd 单元之间存在循环依赖或排序异常,需要用 dot 输出分析依赖图
- 容器宿主机上的 systemd 服务超时未就绪,需要检查 ExecStart 与 TimeoutStopSec 等实际生效属性
适合人员
- 需要排查 Linux 服务启动故障的 SRE 工程师
- 负责维护 systemd 单元配置的平台运维人员
- 处理生产环境服务依赖问题的 DevOps 工程师
- 需要在宿主机上诊断服务生命周期问题的基础设施工程师