首页/系统/Linux 运维命令速查/systemd-analyze verify 单元语法检查
systemd 与服务42 条

systemd-analyze verify 单元语法检查

改完单元文件先 verify:语法错误、不存在的可执行文件、循环依赖都能提前发现,避免 restart 失败才发现。

Linux 运维命令速查系统更新于 2026-10-13

systemd-analyze verify 是什么

systemd-analyze verify 是单元文件的静态检查器:解析指定的 .service、.timer、.socket,报出语法错误、拼错的指令名、ExecStart 指向的不存在或不可执行文件、依赖名拼写错误、找不到的 WantedBy 目标等。它不启动服务,也不覆盖端口冲突、权限、EnvironmentFile 缺失这类运行时问题,因此定位是 daemon-reload 之前的免费保险,而不是上线验证的替代品。

基本信息

适用平台Linux(systemd 系统,非 init.d/sysvinit 环境)
权限要求普通用户即可;检查系统级单元建议 sudo 以完整解析
语法systemd-analyze verify 单元名或单元文件路径
成功标志无任何输出即通过
检查范围语法、指令名、ExecStart 可执行性、依赖与目标名

典型使用场景

  • 手写 unit 之后、systemctl daemon-reload 之前先过一遍
  • 排查 Unit not found,确认文件名、单元名、WantedBy 三者是否对得上
  • 从模板复制新单元时校验残留的旧服务名
  • 检查 .timer 与其配对的 .service 是否同名同目录
  • 系统升级后复核老单元里已被废弃的指令

常用示例

常用示例
systemd-analyze verify /etc/systemd/system/myapp.service   # 用文件路径检查
systemd-analyze verify myapp.service                        # 用单元名检查
systemd-analyze verify myapp.timer                          # 连带检查它引用的 service 是否存在
systemd-analyze verify 'myapp@instance.service'             # 模板单元要带实例名,否则报错误导
systemctl daemon-reload                                     # verify 通过后再重载
systemctl restart myapp && systemctl status myapp --no-pager | head -n 15

常见报错与处理

报错片段含义处理
Unknown key name in section指令名拼错或当前 systemd 版本不支持对照 man 5 systemd.service 改正;版本旧则该指令用不了
Failed to prepare filename单元名与文件名不一致(复制后忘改名)文件名、[Unit] 段与 WantedBy 里的名字统一
is not executable / 文件不存在ExecStart 路径写错、二进制未装或没有执行位用绝对路径,并确认文件存在且有 x 权限
dependency / target not found依赖或目标名拼写错误用 systemctl list-unit-files 查真实存在的单元名
bad unit file setting段名或语法结构有问题检查 [Section] 是否闭合、每行是否为键值形式
verify 只看静态定义。端口被占、运行用户无权限、依赖服务未就绪、EnvironmentFile 文件缺失,都要等 systemctl start 才会暴露,静态通过之后仍要实跑一遍并核对 status 与日志。
改了单元文件必须 systemctl daemon-reload;不重载就 restart 时 systemd 仍用旧定义,很容易得出“配置改了没用”的错误结论。容器或精简系统里可能根本没有 systemd-analyze,先确认环境再判断是不是文件有问题。

易错点

  • verify 通过就直接上线:静态检查不覆盖运行时问题,端口冲突与权限错误照样让服务起不来
  • 改完单元不 daemon-reload 就 restart,误判修改无效,反复改文件反而引入新错误
  • 模板单元(@.service)不带实例名直接 verify,报出的错误是调用方式问题而非文件问题
  • 在 SysV init 或容器镜像里使用该命令:没有 systemd 时代码不存在,报的错与环境有关,别归咎于单元写法

数据来源与参考

  • man 1 systemd-analyze(verify)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌