如何查询Linux系统中各项服务的运行状态?

在Linux系统中,服务是后台运行的关键程序,负责提供特定功能(如Web服务、数据库服务、网络服务等),准确查询服务状态对于系统运维、故障排查至关重要,本文将详细介绍多种查询Linux服务状态的方法,涵盖主流初始化系统(systemd、SysV init、OpenRC等)及常用命令,帮助用户全面掌握服务状态监控技巧。

如何查询linux服务状态

使用systemctl命令(systemd系统,推荐)

systemd是现代Linux发行版(如Ubuntu 16.04+、CentOS 7+、Debian 8+等)的默认初始化系统,功能强大且高效。systemctl是与systemd交互的核心工具,可查询服务运行状态、启用状态、依赖关系等详细信息。

基本语法与常用选项

systemctl [选项] [服务名]

常用选项:

  • status:显示服务当前状态(活动状态、主PID、进程信息、日志摘要等)。
  • is-active:检查服务是否正在运行(返回状态码,0表示运行中,非0表示未运行)。
  • is-enabled:检查服务是否开机自启(返回状态码,0表示已启用,非0表示未启用)。
  • list-units --type=service:列出所有服务单元及其状态(loaded/active/inactive等)。
  • list-dependencies [服务名]:查看服务的依赖关系(直接依赖和间接依赖)。
  • show [服务名]:显示服务的详细属性(如PID、启动参数、环境变量等)。

实用示例

  • 查看服务完整状态

    systemctl status nginx.service

    输出示例:

    ● nginx.service - A high performance web server and a reverse proxy server
       Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
       Active: active (running) since Wed 2023-10-01 10:30:00 CST; 2h 15min ago
     Main PID: 1234 (nginx)
        Tasks: 2 (limit: 1152)
       Memory: 5.2M
       CGroup: /system.slice/nginx.service
               └─1234 nginx: master process /usr/sbin/nginx -g daemon on;
               └─1235 nginx: worker process

    关键信息说明:

    • Loaded:服务单元是否加载(路径、是否开机自启);
    • Active:当前活动状态(running/exited/failed等);
    • Main PID:服务主进程ID;
    • Since:服务启动时间。
  • 检查服务是否运行

    systemctl is-active nginx

    若返回active(或状态码0),表示服务正在运行;返回inactive(或状态码3),表示服务未运行。

  • 检查服务是否开机自启

    systemctl is-enabled nginx

    返回enabled(状态码0)表示已启用开机自启,disabled(状态码1)表示未启用。

  • 查看所有服务状态列表

    systemctl list-units --type=service --state=active  # 仅显示运行中的服务
    systemctl list-units --type=service --all         # 显示所有服务(包括未加载的)
  • 查看服务依赖关系

    systemctl list-dependencies nginx  # 查看nginx的直接和间接依赖服务

使用service命令(兼容SysV init和systemd)

service是传统的服务管理命令,早期用于SysV init系统(如CentOS 6、Ubuntu 14.04等),但在systemd系统中仍可兼容使用(内部调用systemctl),适合习惯传统命令的用户。

基本语法

service [服务名] [操作]

常用操作:

如何查询linux服务状态

  • status:查看服务状态(输出较简单,仅显示进程ID和运行状态)。
  • start/stop/restart:启动/停止/重启服务。
  • reload:重载服务配置(不重启服务)。

实用示例

  • 查看服务状态

    service nginx status

    输出示例(CentOS 7+):

    Redirecting to /bin/systemctl status nginx.service
    ● nginx.service - A high performance web server and a reverse proxy server
       Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
       Active: active (running) since Wed 2023-10-01 10:30:00 CST; 2h 15min ago
     Main PID: 1234 (nginx)
        Tasks: 2 (limit: 1152)
       Memory: 5.2M
       CGroup: /system.slice/nginx.service
               └─1234 nginx: master process /usr/sbin/nginx -g daemon on;
               └─1235 nginx: worker process

    注意:在systemd系统中,service命令会重定向到systemctl,输出格式与systemctl status一致;在SysV init系统中,输出仅包含进程状态(如Running [OK]Stopped [OK])。

  • 传统SysV init系统示例(CentOS 6)

    service httpd status

    输出:

    httpd (pid 1234) 正在运行...

使用ps命令结合grep(通过进程判断服务状态)

ps命令用于查看系统进程,通过过滤进程名可间接判断服务是否运行(但无法区分服务是否被禁用或配置错误),适合快速确认进程是否存在。

基本语法

ps aux | grep [服务名或进程名]
  • aux:显示所有进程的详细信息(用户、CPU、内存、命令等)。
  • grep:过滤包含目标服务名的进程(需注意grep自身进程可能被匹配,可使用grep -v grep排除)。

实用示例

  • 查看nginx进程

    ps aux | grep nginx

    输出示例:

    root      1234  0.0  0.1  9976  1040 ?        Ss   10:30   0:00 nginx: master process /usr/sbin/nginx -g daemon on;
    www-data  1235  0.0  0.2  9976  1040 ?        S    10:30   0:00 nginx: worker process
    root      4567  0.0  0.0  11264   980 pts/0    S+   12:45   0:00 grep --color=auto nginx

    说明:若存在“master process”和“worker process”,则服务正在运行;若无相关进程(仅有grep进程),则服务未运行。

  • 排除grep进程干扰

    ps aux | grep nginx | grep -v grep

使用chkconfig命令(SysV init系统服务管理)

chkconfig是SysV init系统的服务管理工具,用于查看/设置服务开机自启状态,也可结合service命令查询当前运行状态(仅适用于CentOS 6、RHEL 6等旧版系统)。

基本语法

chkconfig --list [服务名]  # 查看服务开机自启状态
chkconfig --level [运行级别] [服务名] on/off  # 设置开机自启/关闭
  • 运行级别:Linux系统的运行级别(如3为多用户命令行模式,5为图形界面模式),默认为2345

实用示例

  • 查看所有服务的开机自启状态

    chkconfig --list

    输出示例:

    如何查询linux服务状态

    nginx           0:off   1:off   2:off   3:on    4:off   5:on    6:off
    httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off

    说明:3:on表示在运行级别3下开机自启,5:off表示在运行级别5下不自启。

  • 查看nginx在运行级别3的开机自启状态

    chkconfig --list nginx | grep "3:"

使用rc-status命令(OpenRC系统,如Gentoo、Alpine)

OpenRC是轻量级的初始化系统,常见于Gentoo Linux、Alpine Linux等。rc-status用于查看运行级别下的服务状态。

基本语法

rc-status [-a] [-l 运行级别] [服务名]
  • -a:显示所有运行级别的服务状态。
  • -l:指定运行级别(如default为默认运行级别)。

实用示例

  • 查看默认运行级别的服务状态
    rc-status

    输出示例:

    default:
      net.lo  started
      net.eth0  started
      nginx  started
      sshd  started
  • 查看nginx服务状态
    rc-status nginx

各命令对比与适用场景

为方便选择,以下总结常用查询命令的适用系统及功能:

命令 适用系统 核心功能 优点 缺点
systemctl systemd(主流发行版) 查询服务状态、依赖、日志、开机自启等 功能全面、信息详细、支持实时监控 旧版系统不兼容
service SysV init、systemd 查询服务运行状态、启停服务 兼容性好、语法简单 输出信息较少(systemd系统中重定向)
ps+grep 所有Linux系统 通过进程判断服务是否运行 通用性强、无需特定工具 无法区分服务禁用状态、需过滤进程
chkconfig SysV init(旧版系统) 查看/设置服务开机自启状态 专用于SysV init的开机管理 仅适用于旧版系统、无法查询运行状态
rc-status OpenRC(Gentoo等) 查看运行级别下的服务状态 适配OpenRC系统 仅适用于特定发行版

高级技巧:结合日志与监控

查询服务状态时,常需结合日志进一步排查问题。

  • 查看服务日志
    journalctl -u nginx.service  # 查看nginx的系统日志(systemd系统)
    tail -f /var/log/nginx/error.log  # 查看nginx的错误日志(需配置日志路径)
  • 实时监控服务状态变化
    systemctl monitor nginx  # 实时输出nginx服务的状态变化(需systemd 235+)

相关问答FAQs

问题1:为什么systemctl status显示服务状态为“failed”?如何解决?

解答
服务状态为“failed”表示服务启动或运行过程中出错,常见原因及解决方法:

  1. 配置错误:检查服务配置文件(如nginx的nginx.conf、MySQL的my.cnf)语法是否正确,可通过nginx -t(nginx)或mysqld --verbose --help(MySQL)测试配置。
  2. 依赖服务未启动:使用systemctl list-dependencies 服务名查看依赖服务,确保依赖服务正常运行(如MySQL依赖network.target)。
  3. 资源不足:检查磁盘空间(df -h)、内存(free -h)是否充足,或调整服务资源限制。
  4. 查看详细错误日志
    journalctl -u 服务名 --since "10 min ago"  # 查看最近10分钟的日志

    根据日志中的错误信息(如端口冲突、权限不足)针对性修复。

问题2:如何判断服务是否被禁用(无法开机自启)?

解答
不同系统下判断方法不同:

  • systemd系统
    systemctl is-enabled 服务名

    返回disabled表示已禁用,enabled表示已启用。

  • SysV init系统
    chkconfig --list 服务名 | grep "3:" | awk '{print $2}'

    若输出为off,表示在运行级别3下禁用;若需查看所有运行级别,使用chkconfig --list 服务名

  • 手动禁用/启用服务(systemd):
    systemctl disable 服务名  # 禁用开机自启
    systemctl enable 服务名   # 启用开机自启

    禁用后,systemctl statusLoaded行会显示/usr/lib/systemd/system/服务名; disabled

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/24055.html

(0)
酷番叔酷番叔
上一篇 2小时前
下一篇 2小时前

相关推荐

  • 怎样正确重启电脑避免伤害关机流程?

    如何安全重启虚拟机中的 Linux 系统重启虚拟机中的 Linux 是运维中的常见操作,但不当操作可能导致数据丢失或服务中断,以下是详细步骤和最佳实践:重启前的关键准备保存工作关闭所有运行中的程序(如编辑器、数据库连接),使用 Ctrl+S 保存文件,避免未保存数据丢失,检查用户活动执行 w 或 who 命令查……

    2025年7月31日
    2500
  • Linux端口占用如何快速解决?

    查找占用端口的进程方法1:使用 netstat 命令sudo netstat -tulnp | grep :<端口号>参数解释:-t:仅显示TCP连接-u:显示UDP连接(可选)-l:列出监听状态的端口-n:以数字形式显示端口(不解析服务名)-p:显示进程ID和名称示例(查找占用80端口的进程):s……

    2025年6月13日
    4100
  • Linux驱动如何正确卸载?多种方法详解

    准备工作识别当前驱动信息查看已加载模块: lsmod | grep -i "驱动关键词" # 如nvidia、rtl88xx检查模块详细信息: modinfo 模块名 # 如modinfo nvidia确定驱动安装方式包管理器安装(Debian/Ubuntu/RHEL等): dpkg -l……

    2025年7月20日
    2700
  • 怎么安装Linux系统?超详细新手教程必看!

    准备工作(关键步骤)选择 Linux 发行版推荐新手使用:Ubuntu、Linux Mint、Fedora(访问官网下载最新 ISO 镜像),企业用户可选:CentOS Stream 或 Debian,验证镜像:下载后务必校验 SHA256 值(官方提供),避免文件损坏,硬件要求最低配置:双核 CPU、4GB……

    2025年7月24日
    2200
  • 如何在linux分包压缩

    Linux 中,可先创建分包(如用 tar 分割文件),再用 gzip 等工具压缩各分包,

    2025年8月9日
    1500

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信