在Linux系统中,管理启动服务是系统运维的基础工作,无论是排查服务异常、优化启动速度,还是确保关键服务开机自启,都需要掌握查看启动服务的方法,Linux的服务管理机制因发行版和版本不同而有所差异,主流系统多采用systemd(如Ubuntu 16.04+、CentOS 7+),而较老版本可能使用SysVinit(如CentOS 6),本文将详细介绍不同机制下查看启动服务的方法,并提供实用示例。
基于systemd的系统查看启动服务(主流方式)
systemd是目前Linux发行版广泛采用的服务管理器,通过systemctl
命令可以全面管理服务的生命周期,查看启动状态也更为便捷。
查看所有已安装的服务单元
使用systemctl list-unit-files
命令可列出系统中所有服务单元文件及其启用状态,过滤出服务类型需添加--type=service
参数:
systemctl list-unit-files --type=service
输出包含三列核心信息:UNIT(服务单元名,如nginx.service
)、STATE(当前状态,如enabled
/disabled
/static
)、DESCRIPTION(服务描述)。
enabled
:服务开机自启;disabled
:服务开机不自启,需手动启动;static
:不可独立启动,通常作为其他服务的依赖。
查看当前活跃的服务
若需了解当前正在运行的服务(包括开机自启和手动启动的),可结合list-units
和--state=running
参数:
systemctl list-units --type=service --state=running
输出会显示ACTIVE状态为active (running)
的服务,并附带加载状态(loaded
)和子进程信息(如main PID
)。
查看特定服务的启动状态
针对单个服务,可通过is-enabled
命令快速判断其是否开机自启:
systemctl is-enabled nginx.service
返回enabled
即开机自启,disabled
则不自启,若服务不存在则报错。
查看服务自启配置的来源
服务自启配置可能位于多个位置,可通过cat
查看服务单元文件中的[Install]
段落(通常定义WantedBy
或RequiredBy
):
cat /usr/lib/systemd/system/nginx.service | grep -A 5 "[Install]"
其中WantedBy=multi-user.target
表示服务在多用户模式(默认启动级别)下自启。
基于SysVinit的系统查看启动服务(老版本兼容)
对于仍在使用SysVinit的系统(如CentOS 6),服务管理依赖chkconfig
命令和运行级别目录,查看方式如下:
使用chkconfig
查看服务开机状态
chkconfig --list
可列出所有服务在不同运行级别(0-6)下的自启状态:
chkconfig --list
输出格式为服务名 级别1:状态 级别2:状态 ...
,例如nginx 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
,其中级别2-3为多用户模式,5为图形界面模式,启用
表示该级别下开机自启。
查看服务脚本位置
SysVinit的服务脚本存放在/etc/init.d/
目录,可通过ls
列出所有服务:
ls /etc/init.d/
例如nginx
、httpd
等脚本均在此目录,可通过/etc/init.d/nginx status
查看当前运行状态。
查看运行级别自启服务
各运行级别的自启服务脚本存放在/etc/rc[0-6].d/
目录,以S
开头(启动)或K
开头(关闭)+数字(启动顺序)命名,
ls /etc/rc3.d/
输出中S50nginx
表示在级别3下,第50位启动nginx
服务。
服务查看方法对比总结
为方便快速查阅,以下表格对比了主流查看方法的适用场景和核心命令:
查看目标 | systemd命令 | SysVinit命令 | 说明 |
---|---|---|---|
查看所有服务及启用状态 | systemctl list-unit-files --type=service |
chkconfig --list |
systemd显示enabled/disabled ,SysVinit显示各级别状态 |
查看当前运行服务 | systemctl list-units --type=service --state=running |
service --status-all |
前者更详细,包含进程ID和运行时长 |
查看单个服务自启状态 | systemctl is-enabled 服务名 |
chkconfig 服务名 |
systemd直接返回状态,SysVinit需结合chkconfig --list 的输出 |
查看服务配置来源 | cat /usr/lib/systemd/system/服务名 |
ls /etc/rc*.d/ |
systemd通过[Install] 段落定位,SysVinit通过运行级别目录脚本判断 |
相关问答FAQs
Q1: 为什么有些服务显示enabled
但当前没有运行?
A: enabled
仅表示服务配置为开机自启,但实际运行可能受依赖服务未启动、资源不足或服务自身错误影响,可通过systemctl status 服务名
查看日志(如journalctl -u 服务名
),排查启动失败原因,若服务依赖network.target
但网络未就绪,可能导致服务启动失败但状态仍为enabled
。
Q2: 如何禁止服务开机自启且停止当前运行的服务?
A: 对于systemd系统,使用systemctl disable 服务名
禁止开机自启,再通过systemctl stop 服务名
停止当前运行;若需彻底移除服务(如删除安装包),则需结合包管理器(如apt remove
/yum erase
),对于SysVinit系统,执行chkconfig 服务名 off
禁止自启,再用service 服务名 stop
停止服务。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20866.html