最直接有效的方式是运行 systemctl status 服务名,它能一次性呈现服务的激活状态、主进程信息、资源占用和最近日志;需重点查看 active(如 active (running))、loaded(配置路径是否正常)、main pid(是否真实存在且运行)、最后几行错误日志;辅以 is-active、journalctl、show、cat 等命令交叉验证,并警惕 active (exited)、mask、端口丢失等“假活跃”陷阱。

最直接有效的方式是运行 systemctl status 服务名,它能一次性呈现服务的激活状态、主进程信息、资源占用和最近日志,是诊断服务是否真正健康的核心命令。
看懂 systemctl status 的关键字段
执行后重点关注以下几行:
-
Active: 显示如
active (running)(正常运行)、active (exited)(一次性服务已执行完毕)、failed(启动失败)等。仅写active不够,括号内状态才是关键 -
Loaded: 查看配置文件路径,若显示
/dev/null; bad或not-found,说明服务被 mask 或单元文件缺失 -
Main PID: 有真实数字且对应进程存在(可用
ps -p PID验证),State 为running才可信;PID 为 0 或空白常意味着启动失败 -
最后几行日志:含
Failed to start、Permission denied、Address already in use等提示,往往直指问题根源
单靠 status 不够?补几个实用命令
status 提供快照,交叉验证才能确认全貌:
-
systemctl is-active 服务名:返回纯文本active/inactive/failed,适合脚本判断 -
journalctl -u 服务名 -n 30 -f:查看最近 30 行日志并持续跟踪新输出,对捕获瞬时错误特别有用 -
systemctl show 服务名:输出完整配置,比如ExecStart命令、Restart=策略、User=设置,排查配置级问题必备 -
systemctl cat 服务名:直接显示该服务的 unit 文件内容,确认你改的是不是正在加载的那个配置
警惕常见“假活跃”陷阱
表面看着 active,实际可能早已失能:
- 显示
active (exited)却误以为服务在跑——这是 rc-local、backup-script 等一次性服务的正常状态,不代表后台守护进程活着 - 主进程 PID 存在,但监听端口消失(用
ss -tlnp | grep :80验证)、子进程崩溃、配置未重载生效,status 都不会自动报错 - 服务被
mask后,systemctl start会直接报 “Unit is masked”,而 status 可能只显示loaded (/dev/null; bad)
快速筛查异常服务的组合技
日常巡检或故障初判可这样操作:
- 查所有失败服务:
systemctl list-units --type=service --state=failed --no-pager - 查所有运行中服务:
systemctl list-units --type=service --state=running --no-pager - 查某服务是否开机自启:
systemctl is-enabled 服务名(注意:enabled ≠ running) - 想跳过分页直接看输出,所有命令加
--no-pager更清爽











