如何查询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)
酷番叔酷番叔
上一篇 2025年9月16日 15:19
下一篇 2025年9月16日 15:37

相关推荐

  • Linux下如何清空文件夹的所有内容?

    在Linux系统中,清空文件夹内容是一项常见的操作,无论是清理缓存、释放存储空间还是重置目录结构,都需要掌握安全高效的方法,本文将详细介绍多种清空文件夹内容的方式,涵盖基础命令、进阶技巧及注意事项,帮助用户根据实际场景选择合适的方法,基础命令:rm -rf 快速清空rm(remove)是Linux中最基础的删除……

    2025年10月7日
    10800
  • 如何删除已安排的Linux at任务?

    退出(删除)at任务的步骤查看当前at任务队列使用 atq 或 at -l 命令列出所有待执行任务,获取任务的唯一ID(位于第一列): atq # 示例输出: # 10 Thu Jul 11 14:30:00 2024 a root # 15 Fri Jul 12 10:00:00 2024 a user1关键……

    2025年8月7日
    13100
  • Linux下如何查看软链接的指向信息?

    在Linux系统中,软链接(Symbolic Link,简称symlink)是一种特殊的文件类型,它类似于Windows系统中的快捷方式,指向另一个文件或目录的路径,软链接可以跨文件系统存在,也可以指向不存在的文件(称为“悬空链接”),查看软链接的信息对于系统管理、文件排查等场景非常重要,本文将详细介绍多种查看……

    2025年10月8日
    11400
  • 如何系统阅读Linux内核?源码分析与架构理解该从何入手?

    阅读Linux内核源码是深入理解操作系统原理、提升系统级编程能力的重要途径,但内核代码庞大复杂(仅主线代码就超千万行),需要系统的方法和耐心,以下从准备阶段、源码结构、核心模块、阅读工具及实践建议等方面,详细说明如何有效阅读Linux内核,阅读前的准备:基础与工具Linux内核是用C语言混合少量汇编编写的,且涉……

    2025年9月8日
    11600
  • 如何轻松掌握高效方法?

    系统日志的位置与分类Linux日志文件通常存储在 /var/log/ 目录下,常见日志包括:系统核心日志:/var/log/messages(CentOS/RHEL)或 /var/log/syslog(Debian/Ubuntu)认证日志:/var/log/auth.log(记录登录、sudo操作)内核日志……

    2025年7月5日
    15900

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信