Linux如何查看当前正在运行的服务?

在Linux系统中,服务是后台运行的关键程序,负责提供特定功能(如Web服务、数据库服务等),查看正在运行的服务是系统运维、故障排查和性能优化的基础操作,本文将详细介绍多种查看Linux运行服务的方法,涵盖常用命令、系统工具及实际应用场景,帮助用户全面掌握服务状态监控技巧。

linux如何查看正在运行的服务

通过systemctl命令查看服务状态(systemd系统)

现代Linux发行版(如Ubuntu 16.04+、CentOS 7+)广泛采用systemd作为初始化系统,systemctl是管理服务的核心命令,通过它可以查看所有服务的运行状态、启用状态及详细信息。

基本语法与常用选项

systemctl [选项] [命令] [服务名]

常用选项包括:

  • --all-a:显示所有服务(包括未运行的)
  • --state=:按状态过滤(如runninginactivefailed
  • --type=service:仅显示服务类型(排除socket、target等)
  • -l--full:显示完整日志(不截断)

示例操作

  1. 查看所有正在运行的服务

    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
  2. 查看特定服务的状态

    systemctl status nginx

    输出会显示服务的详细状态,包括是否运行、启动时间、进程ID及最近的日志摘要(用表示运行,表示停止)。

  3. 检查服务是否处于活动状态

    systemctl is-active nginx

    若服务正在运行,返回active;否则返回inactivefailed

通过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

linux如何查看正在运行的服务

通过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按连接状态过滤)。

示例:

linux如何查看正在运行的服务

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

(0)
酷番叔酷番叔
上一篇 2025年8月31日 00:16
下一篇 2025年8月31日 00:35

相关推荐

  • linux如何运行c语言

    Linux 中,先安装 GCC 编译器,用编辑器写 C 语言代码保存为.

    2025年8月14日
    5800
  • Linux系统如何访问禅道?

    在Linux系统中访问禅道,通常需要搭建对应的Web环境(如LAMP或LNMP),并完成禅道的安装与配置,以下是详细步骤:环境准备禅道是基于PHP开发的,因此需要安装Linux操作系统、Web服务器(Apache/Nginx)、数据库(MySQL/MariaDB)及PHP环境,以Ubuntu 20.04和Cen……

    2025年9月9日
    4200
  • Linux虚拟机启动Windows PE方法

    通过虚拟机设置挂载Windows PE的ISO镜像文件,调整启动顺序优先从该虚拟光驱引导,即可在Linux虚拟机上启动进入Windows PE环境进行系统维护或故障排除。

    2025年7月28日
    6900
  • Linux服务器安装gcc编译器的完整详细步骤是怎样的?

    在Linux服务器环境中,GCC(GNU Compiler Collection)是应用最广泛的编译器套件,支持C、C++、Fortran、Objective-C等多种编程语言的编译,是软件开发、系统运维及服务器环境搭建的基础工具,本文将详细介绍在Linux服务器中安装GCC编译器的完整流程,涵盖不同发行版的安……

    2025年8月24日
    5500
  • 如何获取linux的ip

    Linux中,可通过ifconfig或ip addr

    2025年8月16日
    5900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信