Linux 上所谓“启动的服务器”,通常指两类东西:一是此刻正在运行的服务进程,二是开机时会自动拉起的服务单元。前者用 systemctl list-units --type=service --state=running 一眼看完,后者用 systemctl list-unit-files --type=service --state=enabled 列出清单,两条命令基本就能把一台机器的服务家底摸清。
很多人搜“查看 Linux 启动哪些服务器”,其实想问的是“我这台机器上跑了哪些服务、开了哪些开机项”,这两个问题看着像一回事,排查思路完全不同,跑着的服务未必开机自启,开机自启的也未必此刻活着,分清楚,后面才不会白折腾。
linux查看启动的服务有哪些?先分清“在跑”和“开机起”
运行中服务与开机自启动,是两个维度
- 运行中服务:当前进程存在的服务,对应
active (running)状态,重启机器就没了。 - 开机自启动服务:写在系统启动流程里的单元,对应
enabled状态,和当前是否运行无关。 - 已安装但未启用:
disabled,装了但没开,属于“备用件”。
业内专家指出,运维排查里相当一部分“服务没起来”的误判,都源于把 enabled 当成了 running,看状态时最好两个维度一起看。
三条命令的用途速查
| 目的 | 命令 | 输出要点 |
|---|---|---|
| 看正在运行的服务 | systemctl list-units --type=service --state=running |
UNIT、LOAD、ACTIVE、SUB、DESCRIPTION |
| 看全部已加载服务 | systemctl list-units --type=service --all |
含 failed、inactive |
| 看开机自启清单 | systemctl list-unit-files --type=service --state=enabled |
UNIT FILE、STATE |
| 只看失败的 | systemctl --failed |
快速定位异常单元 |
如果只想看数量,可以加 --no-pager 避免翻页,再配合 wc -l:
systemctl list-units --type=service --state=running --no-pager | wc -l
linux如何查看开机自启动服务?systemd 体系下的标准做法
目前主流发行版(CentOS 7/8/9、Ubuntu 16.04 以后、Debian 8 以后、Rocky、AlmaLinux)都由 systemd 接管启动流程,查开机项就用 systemctl。
查看 enabled 服务清单
systemctl list-unit-files --type=service --state=enabled
输出两列:单元文件名和状态。enabled 表示开机启动,enabled-runtime 表示仅在本次运行期生效,static 表示被别的单元依赖拉起、自身没有独立的启用开关,masked 表示被屏蔽。
想连服务之外的单元一起看,去掉 --type=service:
systemctl list-unit-files --state=enabled
单个服务是否开机自启
systemctl is-enabled nginx systemctl is-active nginx
第一条返回 enabled/disabled/static,第二条返回 active/inactive/failed,两条一起执行,能立刻判断“该起没起”还是“压根没配”。
老系统:SysVinit 与 chkconfig
CentOS 6 及更早版本、部分 Debian 老环境没有 systemd,用这两条:
chkconfig --list # 列出各运行级别的开机状态 service --status-all # Debian/Ubuntu 老版本的运行状态
输出里带 on 的是开机启动,off 的是关闭,数字 3、5 通常对应多用户和图形模式,是生产环境最常看的两个级别。
容易被忽略的三类启动入口
开机自启不只藏在 systemd 里,以下位置也常驻“隐形启动项”:
/etc/rc.local:部分镜像仍保留,末尾exit 0之前的命令都会在启动时执行。crontab -l里的@reboot条目:用户级定时任务,以对应用户身份在开机时跑一次。- systemd timer:
systemctl list-timers可以看,OnBootSec=的定时器会在开机后触发。
行业共识认为,排查启动项时把这三处一起过一遍,能少走不少弯路。
linux查看正在运行的服务命令:把端口和进程对上号
光看服务名有时对不上业务,结合端口看更直观。
列出监听端口
ss -tlnp
输出里 Local Address:Port 是监听地址和端口,Process 列给出进程名和 PID,老系统没有 ss,用:
netstat -tlnp
比较常用的组合是先把端口和进程对应上,再反查服务单元:
ss -tlnp | grep 80
systemctl status $(systemctl list-units --type=service --no-pager | grep -i nginx | awk '{print $1}')
进程视角的补充手段
ps -ef或ps aux:看全量进程,适合确认有没有对应守护进程。lsof -i :8080:按端口反查占用进程,排查端口冲突很顺手。pstree -p:看进程父子关系,判断是不是被别的进程拉起来的。
| 需求 | 推荐命令 |
|---|---|
| 端口监听情况 | ss -tlnp |
| 端口占用进程 | lsof -i :端口 |
| 进程全貌 | ps aux |
| 服务单元状态 | systemctl status 服务名 |
服务器重启后服务没有自动启动怎么排查
这个场景问得很多,尤其是业务方反馈“昨天还好好的,今天重启就不行了”。
按顺序走一遍排查路径
- 确认启用状态:
systemctl is-enabled 服务名,如果是disabled,说明根本没配开机启动。 - 确认本次运行状态:
systemctl is-active 服务名,failed说明启动过程报错。 - 看详细状态和最近日志:
systemctl status 服务名 -l,journalctl -u 服务名 -b --no-pager | tail -n 50看本次启动的日志尾部。 - 查依赖顺序:服务依赖的网络、数据库没就绪时可能直接退出,可在单元文件里看
After=、Requires=、Wants=。 - 看启动耗时分布:
systemd-analyze blame找耗时最长的单元,systemd-analyze critical-chain 服务名看关键链路。 - 确认是否被 mask:
systemctl is-enabled返回masked时,服务被/dev/null软链屏蔽,需要systemctl unmask解除。
云服务器环境下有什么不同
在云服务器上查看开机启动项,命令和物理机一致,差异主要来自镜像和初始化流程,云厂商镜像常会注入 cloud-init 相关单元,cloud-init-local、cloud-init、cloud-config 等,这些在 enabled 列表里占掉好几项,简米云、酷番云等平台的部分镜像还会通过自定义脚本在首次启动时执行初始化,位置通常在 /var/lib/cloud/ 下。
实操建议是:先在 enabled 清单里把 cloud-init 系列和系统基础服务筛掉,剩下的才是业务相关项。
systemctl list-unit-files --type=service --state=enabled --no-pager \ | grep -Ev 'cloud-init|systemd-|dbus|network|ssh'
关于查看 Linux 启动服务的常见疑问
linux查看启动的服务需要 root 权限吗
大多数查询命令普通用户也能跑,但 ss -tlnp 和 lsof -i 要看到完整进程信息通常需要 root,否则 PID 和进程名会显示为空或权限不足。systemctl list-units、systemctl list-unit-files 属于只读查询,普通用户可执行,涉及 enable、disable、start、stop 这类变更操作,则必须用 root 或加 sudo。
systemctl 显示 enabled 但开机没启动是什么原因
常见原因集中在三处:单元本身启动失败退出,被 After= 依赖的单元拖住了顺序,或者启动条件不满足被 Condition...= 判断跳过,排查时先看 journalctl -u 服务名 -b,日志里通常会写明失败原因;再确认单元文件里的依赖和条件项;最后用 systemctl is-failed 服务名 确认是否进入 failed 状态,还有一种情况是服务被其他单元通过 Conflicts= 顶掉,这类冲突在 systemctl status 的输出里会有提示。
怎么临时关闭某个开机启动的服务
systemctl disable 服务名 会移除开机自启的软链,但不会停止当前正在运行的进程;要同时停掉,再执行 systemctl stop 服务名,如果只是想在本次运行期暂停,用 systemctl mask 服务名 屏蔽更彻底,恢复时执行 systemctl unmask 服务名,改动完成后用 systemctl is-enabled 服务名 复核一次状态即可。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/796852.html


