在Linux系统中,”services”通常指运行在后台的守护进程(daemons),它们提供系统或应用程序的核心功能,如网络服务、数据库服务、日志服务等,查看这些服务的状态、运行情况、配置信息等,是系统管理和故障排查的重要环节,Linux查看服务的方法因系统初始化系统(init system)的不同而有所差异,目前主流的初始化系统包括Systemd、SysVinit和Upstart等,此外还可以通过进程管理工具、端口监控等方式辅助查看,本文将详细介绍不同场景下查看Linux服务的方法及实用技巧。

基于Systemd的服务查看方法(主流发行版推荐)
Systemd是目前大多数现代Linux发行版(如Ubuntu 16.04+、CentOS 7+、Debian 8+等)的默认初始化系统,它提供了强大的服务管理功能,通过systemctl命令可以全面查看服务的状态、依赖关系、日志等信息。
列出所有服务及其状态
使用systemctl list-units --type=service命令可以列出系统中所有服务单元(service units)的当前状态,包括已加载(loaded)、活动(active)、非活动(inactive)、失败(failed)等状态。
systemctl list-units --type=service --state=all
参数说明:
--type=service:仅显示服务单元(默认包含所有单元类型,如socket、target等)。--state=all:显示所有状态的服务(默认仅显示活动和非活动状态,不显示失败或已退出的服务)。
查看特定服务的详细状态
若要查看某个具体服务(如nginx)的状态,使用systemctl status <service_name>.service(.service后缀可省略)。
systemctl status nginx ```包括:服务的主进程ID(Main PID)、加载状态(Loaded)、活动状态(Active)、子进程(Sub-processes)、控制组(CGroup)、日志(Journal)等关键信息,若服务处于失败状态,日志部分会显示错误原因,便于快速定位问题。 #### 3. 查看服务的启用状态(开机自启) 服务的“启用”状态表示是否会在系统启动时自动加载,通过`systemctl is-enabled <service_name>`可检查: ```bash systemctl is-enabled nginx
返回值为enabled(开机自启)、disabled(不自启)或static(静态依赖,无法直接启用),使用systemctl list-unit-files --type=service可查看所有服务的启用状态列表。
查看服务依赖关系
Systemd支持查看服务的依赖关系,通过systemctl list-dependencies <service_name>可列出该服务依赖的其他单元(如依赖的服务、挂载点等)。
systemctl list-dependencies nginx
反向依赖(依赖该服务的其他单元)可通过--reverse参数查看:
systemctl list-dependencies nginx --reverse
查看服务日志
服务的运行日志通常存储在journal中,通过journalctl -u <service_name>可过滤并查看特定服务的日志。
journalctl -u nginx -f # 实时跟踪nginx服务的日志 journalctl -u nginx --since today # 查看今天以来的nginx日志
基于SysVinit的服务查看方法(传统发行版适用)
老版本的Linux发行版(如CentOS 6、Debian 7等)使用SysVinit作为初始化系统,服务管理主要通过service和chkconfig命令实现。
查看服务状态
使用service <service_name> status命令查看服务当前状态。

service httpd status
若服务正在运行,会显示进程ID(PID)及运行时长;若未运行,则提示”unrecognized service”或显示停止状态。
列出所有服务状态
service --status-all命令会列出系统中所有服务的状态,用、、等符号表示运行状态(具体符号含义因系统而异,通常表示运行中,表示停止)。
service --status-all
查看服务开机启动状态
chkconfig --list命令可列出所有服务及其在不同运行级别(runlevel)下的启动状态。
chkconfig --list
输出格式为服务名 运行级别1 启动状态 运行级别2 启动状态 ...,on表示开机启动,off表示不自启,查看特定服务的开机状态:
chkconfig --list httpd
直接查看服务脚本
SysVinit的服务脚本通常存放在/etc/init.d/目录下,可直接通过脚本名称查看服务信息(如帮助文档、默认配置等):
/etc/init.d/httpd status # 等同于service httpd status /etc/init.d/httpd --help # 查看脚本支持的参数
基于Upstart的服务查看方法(Ubuntu早期版本)
Ubuntu 14.04及更早版本使用Upstart作为初始化系统,服务管理通过initctl或service命令实现。
列出所有服务
initctl list命令可列出所有由Upstart管理的任务(包括服务),显示任务状态(running、stopped等)、进程ID等信息。
initctl list
查看特定服务状态
initctl status <job_name>(job为服务在Upstart中的定义名称,如nginx、mysql等)查看具体服务状态:
initctl status nginx
查看服务配置
Upstart服务的配置文件通常存放在/etc/init/目录下(如nginx.conf),通过cat或grep可查看服务定义的启动条件、任务描述等:
cat /etc/init/nginx.conf
通用工具辅助查看服务状态
除上述基于初始化系统的方法外,还可通过进程管理工具、端口监控等方式辅助确认服务状态。

通过进程查看服务
使用ps命令查看与服务相关的进程,例如查看nginx的主进程:
ps aux | grep nginx
aux参数显示所有进程的详细信息,grep nginx过滤出包含nginx关键词的进程(注意避免过滤到grep自身),若服务正在运行,会显示进程的PID、CPU/内存占用、启动命令等信息。
通过端口查看服务
若服务监听特定端口(如Web服务监听80端口),可通过netstat或ss命令查看端口占用情况,进而确认服务状态:
netstat -tulnp | grep :80 # 查看监听80端口的进程 ss -tulnp | grep :80 # ss是netstat的替代工具,更高效
输出中的PID/Program name字段可关联到具体的服务进程。
查看系统服务列表
/etc/services文件是系统维护的端口与服务的映射表,可通过grep查看特定端口对应的服务名称:
grep ":80 " /etc/services
(注意端口号后需加空格或制表符,避免匹配到包含80的其他端口,如8080)。
不同工具对比与适用场景
为方便快速选择合适的方法,以下列出常用查看服务工具的对比:
| 工具/命令 | 适用场景 | 常用参数/示例 | 特点 |
|---|---|---|---|
| systemctl | Systemd系统(主流发行版) | list-units, status, is-enabled |
功能全面,支持依赖管理、日志查看 |
| service | SysVinit系统(传统发行版) | --status-all, status <service> |
兼容性广,操作简单 |
| initctl | Upstart系统(Ubuntu早期版本) | list, status <job> |
任务管理灵活,适合事件驱动型服务 |
| ps | 通用进程查看 | aux, grep <service> |
可关联进程与服务,无需root权限 |
| netstat/ss | 端口与服务关联 | -tulnp, grep :<port> |
通过端口确认服务运行状态,适合网络服务 |
最佳实践建议
- 优先使用系统默认工具:根据Linux发行版的初始化系统选择对应工具(如Systemd用
systemctl),避免混用导致命令失效。 - 结合日志排查问题:服务启动失败或运行异常时,优先通过
journalctl(Systemd)或/var/log/下的服务日志(如/var/log/nginx/error.log)查看错误信息。 - 定期检查服务状态:通过
systemctl list-units --type=service --state=failed定期查看失败的服务,及时处理异常。
相关问答FAQs
Q1: 如何查看某个服务是否已设置为开机自启?
A: 根据系统初始化系统选择对应命令:
- Systemd系统:使用
systemctl is-enabled <service_name>,返回enabled表示开机自启,disabled表示不自启。 - SysVinit系统:使用
chkconfig --list <service_name>,查看各运行级别下的启动状态(on为开机自启)。 - Upstart系统:通过
initctl status <job_name>查看任务状态,或检查/etc/init/<job>.conf配置文件中的start on条件(若包含runlevel [2345]则可能开机自启)。
Q2: 服务启动失败时,如何快速定位问题原因?
A: 可按以下步骤排查:
- 查看服务状态:使用
systemctl status <service_name>(Systemd)或service <service_name> status(SysVinit),确认失败状态及错误摘要。 - 检查服务日志:通过
journalctl -u <service_name> --no-pager(Systemd)或tail -f /var/log/<service>/error.log(SysVinit)查看详细日志,定位错误信息(如端口冲突、配置文件错误、依赖缺失等)。 - 检查依赖资源:确认服务依赖的端口(
ss -tulnp | grep <port>)、文件(ls -l /path/to/file)、用户权限(systemctl show <service_name> | grep User=)等是否正常。 - 手动启动测试:尝试手动启动服务(
systemctl start <service_name>),观察是否报错,并根据错误提示修复问题。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/23999.html