在Linux系统中,服务通常指在后台持续运行的守护进程(daemon),它们为系统或应用程序提供特定功能,如Web服务、数据库服务、网络服务等,查看Linux中的服务状态、运行情况、配置信息等是系统管理和运维的基础操作,本文将详细介绍多种查看服务的方法,涵盖命令行工具、图形化界面及日志分析等场景,帮助用户全面掌握服务状态监控技巧。

基础概念:Linux服务的分类与管理机制
在深入了解查看方法前,需先明确Linux服务的分类和管理机制,传统Linux发行版(如CentOS 6及之前)使用SysV init系统,通过/etc/init.d/目录下的脚本管理服务;而现代发行版(如Ubuntu 16.04+、CentOS 7+)普遍采用systemd系统,通过systemctl命令管理服务,支持依赖关系、并行启动、资源限制等高级功能,服务的状态通常包括“运行中(active)”、“停止(inactive)”、“失败(failed)”等,开机自启状态则分为“启用(enabled)”、“禁用(disabled)”。
使用命令行工具查看服务状态
命令行是Linux服务管理最常用的高效方式,以下介绍几种主流工具及其用法。
systemctl:systemd系统的核心工具
systemctl是systemd的默认管理工具,功能强大,可查看服务状态、启用/禁用自启、查看依赖关系等。
常用命令及示例:
-
列出所有服务状态:
systemctl list-units --type=service --all
参数说明:
--type=service仅显示服务类型,--all包含未运行的服务,输出中会显示服务的单元名称(如nginx.service)、加载状态(loaded)、活动状态(active/inactive)、子状态(running/exited)、PID等信息。 -
查看特定服务状态:
systemctl status nginx.service
会显示服务的详细状态,包括运行时间、主进程ID(PID)、是否开机自启,以及最近的日志摘要(红色部分通常表示错误)。
-
过滤运行中/停止的服务:
# 列出所有正在运行的服务 systemctl list-units --type=service --state=running # 列出所有停止的服务 systemctl list-units --type=service --state=inactive
-
检查服务是否开机自启:
systemctl is-enabled nginx.service
返回
enabled表示开机自启,disabled表示禁用,static表示由其他服务间接管理。 -
查看服务依赖关系:
systemctl list-dependencies nginx.service
会显示当前服务依赖的其他服务(Requires)和被依赖的服务(Wanted by),便于排查启动失败原因。
systemctl常用命令速查表:
| 命令 | 作用 | 示例 |
|——|——|——|
| systemctl list-units --type=service | 列出所有服务状态 | systemctl list-units --type=service --state=running |
| systemctl status <服务名> | 查看服务详细状态 | systemctl status sshd.service |
| systemctl is-enabled <服务名> | 检查服务开机自启状态 | systemctl is-enabled httpd.service |
| systemctl list-dependencies <服务名> | 查看服务依赖关系 | systemctl list-dependencies mysql.service |

service:兼容SysV init的命令
对于仍使用SysV init脚本的旧系统(或兼容模式),service命令可管理服务,它是/etc/init.d/目录下脚本的封装工具。
常用命令及示例:
-
查看服务状态:
service nginx status
输出类似“nginx is running”或“nginx is not running”,但不如
systemctl详细。 -
列出所有服务状态:
service --status-all
会列出
/etc/init.d/下所有脚本的状态,[ + ]表示运行中,[ - ]表示停止,[ ? ]表示状态未知。
ps/top/htop:通过进程查看服务
服务本质是进程,可通过进程管理工具查看服务对应的进程信息。
-
ps命令:静态查看进程,结合
grep过滤服务相关进程:ps aux | grep nginx
输出中会显示nginx进程的PID、CPU/内存占用、启动命令等信息,若
grep结果包含grep自身,可用grep -v "grep"过滤。 -
top/htop命令:动态实时监控进程,按
P(CPU占用)、M(内存占用)排序,直观查看服务资源使用情况:htop
启动后可通过搜索功能(
F3或)输入服务名(如“nginx”)快速定位进程。
netstat/ss:查看服务关联的网络端口
服务通常监听特定端口,通过端口可反向定位服务状态。
-
ss命令(推荐,替代传统
netstat):# 列出所有监听端口及对应服务 ss -tulnp | grep :80
参数说明:
-t(TCP)、-u(UDP)、-l(仅监听端口)、-n(数字显示,不解析域名)、-p(显示进程ID和名称),若nginx监听80端口,输出会包含"nginx: master process"。
-
netstat命令(旧版系统常用):
netstat -tulnp | grep :80
图形化工具查看服务
对于不熟悉命令行的用户,Linux发行版通常提供图形化管理工具。
-
GNOME系统监视器(Ubuntu等GNOS桌面环境):
打开“活动”→“系统监视器”,切换到“服务”标签页,可查看所有服务的状态、描述、PID,支持手动启动/停止服务。 -
systemd-analyze:systemd自带的分析工具,可查看服务启动时间:
# 查看系统启动耗时 systemd-analyze # 查看各服务启动耗时排序 systemd-analyze blame
输出中会显示每个服务的启动时间(如
nginx.service 123ms),定位启动慢的服务。
查看服务配置与日志
服务配置文件位置
-
systemd服务文件:通常位于
/usr/lib/systemd/system/(系统默认)或/etc/systemd/system/(用户自定义),例如nginx.service,可通过cat查看配置,如cat /usr/lib/systemd/system/nginx.service,了解服务的启动命令、依赖、环境变量等。 -
SysV init脚本:位于
/etc/init.d/,例如/etc/init.d/nginx,可通过cat查看脚本内容。
服务日志查看
-
journalctl:systemd的日志工具,可查看服务的详细日志:
# 查看nginx服务的所有日志 journalctl -u nginx.service # 实时监控nginx服务日志 journalctl -u nginx.service -f # 查看最近1小时的nginx日志 journalctl -u nginx.service --since "1 hour ago"
日志中包含服务的启动/停止记录、错误信息(如配置文件语法错误、端口冲突),是排查服务问题的关键依据。
-
传统日志文件:部分服务(如Apache)仍将日志写入
/var/log/目录,例如/var/log/nginx/error.log,可通过tail -f实时查看:tail -f /var/log/nginx/error.log
常见问题排查
- 服务启动失败:先用
systemctl status <服务名>查看状态,再用journalctl -u <服务名>查看错误日志,常见原因包括配置文件错误、依赖服务未启动、端口被占用等。 - 端口占用但服务未运行:用
ss -tulnp | grep <端口号>查看占用端口的进程,若为僵尸进程,需终止对应PID(kill -9 <PID>)。
相关问答FAQs
Q1:如何查看某个服务是否设置为开机自启?
A:使用systemctl is-enabled <服务名>命令,查看SSH服务是否开机自启,执行systemctl is-enabled sshd.service,返回enabled表示开机自启,disabled表示禁用,static表示由其他服务间接管理(如dbus.service)。
Q2:服务启动失败时,如何快速定位问题?
A:可通过三步定位:① 用systemctl status <服务名>查看服务状态,确认是否为“failed”状态;② 用journalctl -u <服务名> --no-pager -n 50查看最近50行日志,重点关注“ERROR”“Failed”等关键词;③ 检查服务配置文件语法(如nginx -t检查nginx配置)或依赖服务是否运行(如systemctl is-enabled <依赖服务名>)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/22004.html