在Linux系统中,服务是后台运行的关键程序,负责提供特定功能(如Web服务、数据库服务等),查看正在运行的服务是系统运维、故障排查和性能优化的基础操作,本文将详细介绍多种查看Linux运行服务的方法,涵盖常用命令、系统工具及实际应用场景,帮助用户全面掌握服务状态监控技巧。
通过systemctl命令查看服务状态(systemd系统)
现代Linux发行版(如Ubuntu 16.04+、CentOS 7+)广泛采用systemd作为初始化系统,systemctl
是管理服务的核心命令,通过它可以查看所有服务的运行状态、启用状态及详细信息。
基本语法与常用选项
systemctl [选项] [命令] [服务名]
常用选项包括:
--all
或-a
:显示所有服务(包括未运行的)--state=
:按状态过滤(如running
、inactive
、failed
)--type=service
:仅显示服务类型(排除socket、target等)-l
或--full
:显示完整日志(不截断)
示例操作
-
查看所有正在运行的服务
systemctl list-units --type=service --state=running
输出结果包括服务名、加载状态(loaded)、活动状态(active)、子进程状态(running)、主PID等信息,
UNIT LOAD ACTIVE SUB DESCRIPTION sshd.service loaded active running OpenBSD Secure Shell server nginx.service loaded active running The NGINX HTTP and reverse proxy server
-
查看特定服务的状态
systemctl status nginx
输出会显示服务的详细状态,包括是否运行、启动时间、进程ID及最近的日志摘要(用表示运行,表示停止)。
-
检查服务是否处于活动状态
systemctl is-active nginx
若服务正在运行,返回
active
;否则返回inactive
或failed
。
通过service命令查看服务状态(兼容SysVinit)
对于较老的Linux系统(如CentOS 6、Ubuntu 14.04)或兼容SysVinit的systemd系统,service
命令可管理服务,语法简单直观。
基本语法
service 服务名 [选项]
常用选项:
status
:查看服务状态start
/stop
/restart
:启动/停止/重启服务
示例操作
service apache2 status # 查看Apache服务状态 service sshd restart # 重启SSH服务
输出结果会直接显示服务是否运行,
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since ...; ... ago
注意:service
命令本质上是调用/etc/init.d/
下的服务脚本,在systemd系统中可能部分功能受限,建议优先使用systemctl
。
通过ps和top命令查看进程级服务
服务本质上是后台进程,通过ps
(静态查看)和top
(动态监控)可从进程角度确认服务运行状态。
ps命令:过滤服务相关进程
ps aux | grep 服务名
aux
:显示所有进程的详细信息(用户、PID、CPU/内存占用等)grep
:过滤包含服务名的进程(注意:grep
自身也会被匹配,可用grep -v grep
排除)
示例:
ps aux | grep nginx
输出:
root 1234 0.0 0.1 10240 1236 ? Ss 10:00 0:00 nginx: master process /usr/sbin/nginx -g daemon on;
www-data 1235 0.0 0.2 10560 2568 ? S 10:00 0:00 nginx: worker process
master process”为主进程,“worker process”为工作进程,均存在则服务正常运行。
top命令:实时监控进程状态
top -p $(pgrep -d, 服务名)
pgrep
:获取服务名的进程ID(-d,
用于分隔多个PID)-p
:指定监控的进程ID
示例:
top -p $(pgrep -d, nginx)
可实时查看nginx进程的CPU、内存占用及运行状态,若进程存在且资源占用正常,则服务运行正常。
通过netstat和ss命令查看端口关联服务
服务通常通过监听特定端口提供功能,通过端口可反向关联运行的服务。
netstat命令(传统工具,逐渐被ss替代)
netstat -tulnp | grep 端口号
-t
:TCP端口,-u
:UDP端口,-l
:仅显示监听端口,-n
:以数字形式显示地址和端口,-p
:显示进程ID/名称
示例:
netstat -tulnp | grep :80
输出:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx: master
表明80端口被nginx主进程(PID 1234)监听。
ss命令(推荐,更高效)
ss -tulnp | grep 端口号
语法与netstat
类似,但速度更快,支持更多过滤条件(如-state
按连接状态过滤)。
示例:
ss -tulnp | grep :3306
输出:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 5678/mysqld
表明3306端口被MySQL进程(mysqld)监听。
服务状态分类与含义
理解服务状态是排查问题的关键,常见状态包括:
- active (running):服务正在运行。
- inactive (dead):服务已停止。
- failed:服务启动失败或运行时异常(需查看日志)。
- enabled:服务开机自启(与运行状态无关)。
- disabled:服务不自启。
通过systemctl is-enabled 服务名
可检查开机自启状态,
systemctl is-enabled nginx # 返回enabled/disabled/static
实际应用场景示例
排查服务无法启动问题
若用户反馈“网站无法访问”,需依次检查:
systemctl status nginx # 查看服务状态 journalctl -u nginx -n 10 # 查看最近10行服务日志 ss -tulnp | grep :80 # 检查80端口是否监听
若日志显示“bind to [::]:80 failed: Address already in use”,需用lsof -i :80
查看端口占用进程。
监控关键服务资源占用
对高负载服务(如MySQL),用top
持续监控进程资源:
top -p $(pgrep -d, mysqld)
若CPU占用持续高于80%,需结合mysqldumpslow
分析慢查询日志优化性能。
常用查看服务命令对比
命令名称 | 所属工具 | 主要功能 | 常用选项 | 适用系统 |
---|---|---|---|---|
systemctl | systemd | 管理系统服务,查看状态 | list-units, status, is-active, –all | RHEL7+, Ubuntu16.04+ |
service | SysVinit/systemd | 启动/停止/查看服务状态 | start, stop, status, restart | 所有Linux |
ps | coreutils | 查看进程,过滤服务进程 | aux, -ef, grep | 所有Linux |
top/htop | procps/htop | 实时监控进程运行状态 | -p, 按进程名过滤 | 所有Linux |
netstat/ss | net-tools/iproute2 | 查看端口关联服务 | -tulnp, -tulpn | net-tools(旧),ss(新) |
相关问答FAQs
如何区分服务是系统自带还是用户安装的?
解答:可通过查看服务的安装路径或配置文件位置判断。
- 使用
which 服务名
查看可执行文件路径(如which nginx
返回/usr/sbin/nginx
为系统安装,/usr/local/nginx/sbin/nginx
为编译安装); - 检查服务配置文件:系统自带服务通常位于
/lib/systemd/system/
或/etc/init.d/
,用户安装的服务可能自定义在/etc/systemd/system/
或用户目录下(如~/.config/systemd/user/
)。
服务启动失败时如何查看错误日志?
解答:systemd服务日志可通过journalctl
查看,例如journalctl -u 服务名 -n 100
(显示最近100行日志);SysVinit服务日志通常在/var/log/
下对应服务目录(如/var/log/nginx/error.log
),或使用tail -f /var/log/syslog
查看系统日志。systemctl status 服务名
也会显示错误摘要,Failed to start XXX: Unit xxx.service is not active”。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20572.html