最准确方式是用 systemctl --type=service --state=running 或等价的 systemctl list-units --type=service --state=running 查看当前真正运行的服务,输出中 active 状态为 running 才算实际运行。
在基于 systemd 的系统(如银河麒麟、ubuntu 20.04+、centos 8+、debian 10+)中,查看当前正在运行的所有系统服务,最准确、最直接的方式是使用 systemctl 命令。它反映的是 systemd 实际托管并处于 active(running) 状态的服务,不是进程快照,也不是历史配置。
用 systemctl 查看实时运行的服务
执行以下命令:
- systemctl --type=service --state=running —— 精简列出所有当前处于 running 状态的服务,不含 inactive、failed 或 loaded 但未启动的项;
- systemctl list-units --type=service --state=running —— 功能等价,输出格式更完整,含加载状态、描述等字段,适合排查时参考。
注意:这两个命令结果一致,前者是后者的简写形式。输出中每行第一列为服务名(如 sshd.service),第二列为 loaded 状态,第三列为 active 状态(显示 running 才算真正在运行)。
查已启用但未必在运行的服务
如果想确认哪些服务被设为开机自启(即使当前没运行),用:
- systemctl list-unit-files --type=service --state=enabled —— 只显示 enabled 状态的服务单元文件;
- systemctl list-unit-files --type=service —— 显示全部 service 文件及其启用状态(enabled/disabled/static/indirect),static 表示仅作依赖,不能单独启用。
这类信息存在磁盘配置中(/etc/systemd/system/ 和 /usr/lib/systemd/system/),不反映当前运行实况,但对理解服务生命周期很有帮助。
辅助验证:看端口和进程
当 systemctl 显示某服务为 running,但业务无响应时,可进一步交叉验证:
-
ss -tulnp —— 查看哪些程序正在监听网络端口(如
nginx占 80、sshd占 22),确认服务是否真正在提供网络能力; -
ps aux | grep '[n]ginx'(替换为具体服务名)—— 检查该服务主进程是否存在;避免写成
grep nginx,否则会把 grep 自身也列出来。
这些命令不替代 systemctl,而是补足视角:一个看声明式管理状态,一个看实际运行痕迹。
旧式兼容命令(慎用)
部分深度定制版银河麒麟或老旧镜像可能保留 SysV 兼容层,可尝试:
-
service --status-all —— 输出中带
[ + ]表示运行中,[ - ]表示停止; - 若提示
command not found,说明已移除 sysvinit 工具包,应完全转向 systemctl 方案。
该命令不区分 systemd 托管与手工启动的服务,且无法识别 modern service 单元,仅作过渡参考。











