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设备驱动如何编写?关键步骤与注意事项有哪些?

    Linux设备驱动是内核与硬件交互的核心组件,负责直接操作硬件设备并为上层应用提供统一的访问接口,编写Linux设备驱动需要深入理解内核机制、硬件工作原理及内核编程规范,以下从开发环境准备、核心步骤、关键代码结构及调试方法等方面详细说明,开发环境准备编写设备驱动前需搭建完整的开发环境,包括:内核源码:需与目标系……

    2025年8月30日
    10800
  • 为什么裁剪内核能让系统性能飙升?

    裁剪 Linux 内核是通过移除未使用的代码和模块来优化系统性能、减少资源占用(内存/存储)并提升安全性的高级操作,本文提供专业、可验证的操作指南,所有步骤均基于 Linux 官方文档及社区最佳实践,适合具备基础 Linux 知识的用户,操作前请备份重要数据,性能提升:减少冗余代码,降低内存占用,加快启动速度……

    2025年7月21日
    14500
  • linux如何读取内存内容

    Linux 中,可使用 cat /proc/meminfo 查看内存总体信息,用

    2025年8月16日
    11700
  • 在linux上如何删除war包

    Linux上,你可以使用rm命令删除war包,`rm /path/to/yourfile.

    2025年8月18日
    15200
  • 手机连接Linux系统有哪些具体操作步骤与方法?

    手机与Linux系统的连接在日常使用中需求广泛,无论是文件传输、远程控制还是系统管理,掌握多种连接方式能极大提升效率,以下是几种主流连接方法的详细步骤及适用场景,帮助用户根据需求选择合适的方式,USB有线连接:最直接的文件传输方式USB连接是最基础且稳定的方式,适合需要频繁传输大文件或无需网络的环境,操作步骤如……

    2025年9月20日
    11100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信