systemctl list-units --type=service 默认仅显示已加载且活跃的服务,加--all才显示全部;--state=running查运行中服务,--state=enabled查开机自启服务;enabled≠running。

systemctl list-units --type=service 显示所有服务状态
这条命令能列出当前 systemd 管理的所有 service 单元,包括正在运行、已退出、失败或未激活的。默认只显示「已加载且活跃」的,加 --all 才能看到全部:
-
systemctl list-units --type=service --state=running:只看正在运行的服务 -
systemctl list-units --type=service --state=enabled:只看开机自启(但未必在运行)的服务 - 注意:
enabled≠running,比如docker可能设为启用但没手动启动过,此时它不会出现在--state=running结果里
systemctl is-active 和 systemctl is-enabled 判断单个服务状态
查某个服务是否在跑,或者是否设为开机自启,用这两个命令最直接。它们返回纯文本(active / inactive 或 enabled / disabled),适合脚本判断:
-
systemctl is-active nginx返回active表示 Nginx 正在运行;返回inactive不代表挂了,可能只是没启动过 -
systemctl is-enabled ssh返回enabled表示系统启动时会尝试拉起sshd;若返回static,说明该服务被其他服务依赖,不能单独禁用(比如dbus-broker) - 常见误判点:
is-active对于刚装好但没 start 过的服务,一定返回inactive,别以为是异常
journalctl -u 服务名 查启动失败原因
服务显示 failed 或启动后立刻退出,journalctl 是第一排查工具。它读的是 systemd 的日志,比看 /var/log/ 下的旧日志更准:
-
journalctl -u mysql --since "2024-05-01":查 MySQL 自某天以来的日志 -
journalctl -u nginx -n 50 -f:实时跟踪最近 50 行 Nginx 日志 - 关键提示:很多服务失败是因为配置文件语法错(如
nginx -t没过)、端口被占、用户权限不对(比如www-data目录不可写),这些都会在 journal 输出里直接体现
netstat 或 ss 看端口反推服务是否真在监听
有时候 systemctl is-active 显示 active,但你访问不了服务——可能进程活着,却没真正 bind 到端口。这时候得绕过 systemd,看网络层:
-
ss -tlnp | grep :80:查监听 80 端口的进程(-tTCP,-llistening,-n数字端口,-p显示进程,需要 root 权限) -
netstat -tulpn | grep :22:老派写法,效果类似,但部分新发行版默认不装net-tools - 注意:
ss输出里的pid/program列可能为空(权限不足或被隐藏),这时要加sudo;另外,Docker 容器内的服务不会出现在宿主机的ss结果里
真正麻烦的不是命令记不住,而是看到 active (running) 就以为万事大吉。端口没开、防火墙挡着、SELinux 拦着、配置里写了 localhost 却从外网访问——这些都不会让 systemctl 报错,但服务就是用不了。










