首页/系统/Linux 运维命令速查/systemctl status 读懂服务状态
systemd 与服务42 条

systemctl status 读懂服务状态

status 输出:Loaded(是否自启/单元文件路径)、Active(运行态与时长)、Main PID 与最近日志;一眼判断服务健康度。

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

systemctl status 是什么

status 把一个单元的现状压进一屏:Loaded 段说明单元文件从哪来、是否为开机自启;Active 段给出运行状态与已持续的时间、主进程 PID 与退出码;末尾附上最近几条日志。它是排查服务问题的第一入口,但需要会读——判断健康不能只看「active (running)」这几个字,Type 决定了一个单元的多长时间、什么状态才算正常。

基本信息

适用平台Linux(systemd 发行版)
命令语法systemctl status [单元名];不带单元名则显示系统整体概览
常用选项--no-pager 不分页、-l 不截断长行、--full 不省略信息、-n 控制附带日志行数、--plain 纯文本输出
退出码单元处于 active 时返回 0;inactive 或 failed 时返回非 0(通常为 3),可直接用于脚本判断
补充命令systemctl show 单元 -p 字段 用于取精确字段,systemctl is-active / is-enabled 用于脚本判断

典型使用场景

  • 服务刚重启:确认新进程是否接管并处于预期状态
  • 故障初判:先看 Active 与退出码,再决定去 systemd 层还是应用层继续查
  • 确认自启配置:Loaded 行直接显示 enabled 或 disabled,不必再单独查
  • 快速看日志尾:服务刚报错时附带的几行日志往往足够定位
  • 批量脚本:用 status 的退出码判断服务是否可用,比解析文本稳定
  • 核对主进程:Main PID 与服务内部实际监听的进程是否一致

常用示例

常用示例
systemctl status nginx --no-pager -l
systemctl status myapp -l -n 50          # 多带一些日志行
systemctl status                          # 不写单元看整体概览
systemctl show myapp -p MainPID,ExecMainStatus,ActiveState,SubState,NRestarts
systemctl is-active --quiet myapp && echo running   # 脚本判断
systemctl is-enabled myapp                # 只看开机自启状态

输出逐段读法

段落含义怎么看
Loaded是否开机自启(enabled/disabled/masked)与单元文件路径masked 表示被屏蔽;not-found 说明单元不存在
Active运行状态与持续时间:active (running)、active (exited)、inactive (dead)、failedactive (exited) 对 oneshot 是正常收尾,不是故障
Main PID主进程号与所属控制组值为 0 通常表示当前没有主进程
Status应用自己上报的附加状态文本常用于显示监听地址或工作线程数
Tasks单元控制组内的任务数与内存占用可快速判断进程是否异常膨胀
末尾日志最近几条 journal 记录只是摘要,全量要用 journalctl -u
active (exited) 是 oneshot 类型单元的正常终态:任务执行完、进程退出、状态保留为成功。看到它并不代表服务挂了,判断依据应该是单元的 Type 与实际预期——常驻服务若显示 exited,才说明主进程提前退出了。
status 的文本输出会随 locale 与 systemd 版本变化,脚本里不要解析它。判断运行态用 systemctl is-active --quiet,判断自启用 is-enabled,取具体字段用 systemctl show -p 字段名。
状态显示 not-found 或内容与文件不符时,先执行 systemctl daemon-reload。刚新建或刚改过的单元文件没有重载前,systemd 用的仍是旧定义,容易得出「配置改了没生效」的误判。
status 与 show 的分工:status 是给人看的摘要,show 会输出该单元的全部属性(几十个字段),适合精确取值,例如 systemctl show 单元 -p NRestarts 看重启次数、-p ExecMainExitTimestamp 看上次退出时间、-p FragmentPath 确认实际加载的单元文件路径。排查反复重启的服务时,这几个字段比状态行更有信息量。
systemctl --failed 一次性列出所有处于 failed 的单元,是登录机器后的快速体检动作;配合逐个 status 查看,能很快判断是单个服务自身问题,还是依赖链上某个上游服务失败引发的连带结果。若排查对象是由定时器触发的单元,用 systemctl list-timers 看最近一次与下一次触发时间。

易错点

  • 把 active (exited) 当成服务异常:oneshot 类单元正常结束就是该状态,判断要看单元类型与预期行为
  • 只看 status 附带的几行日志就下结论,排障需要全量日志时应用 journalctl -u 服务名 -n 200
  • 在脚本里解析 status 的文本输出,改个语言或升级 systemd 就会失效;应用 is-active、is-enabled 与 show -p
  • Loaded 显示 enabled 就以为服务在运行:enable 只管开机自启,当前运行态要看 Active 段
  • 单元刚改过却没 daemon-reload,status 反映的还是旧定义,得出的结论不可信

数据来源与参考

  • man 1 systemctl(status 段)

相关工具

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