如何查询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下tar包如何安装MySQL?

    在Linux系统中使用tar包安装MySQL是一种灵活的方式,尤其适合需要自定义安装路径或特定版本的场景,以下是详细的安装步骤及注意事项,涵盖环境准备、依赖安装、配置优化及安全设置等内容,安装前准备工作检查系统环境确保Linux系统满足MySQL的基本要求:内核版本建议3.10+(CentOS 7+或Ubunt……

    2025年9月15日
    9900
  • linux如何打开一个端口映射

    在Linux系统中,端口映射(通常指端口转发)是将网络流量从一个IP地址和端口转发到另一个IP地址和端口的过程,常用于内网服务暴露到公网、容器端口映射等场景,实现端口映射的主要工具包括iptables(传统Linux防火墙)和firewalld(CentOS 7+、RHEL 7+等系统默认防火墙),下面分别介绍……

    2025年10月3日
    7900
  • 2022年4月13日发生了什么大事?

    在Linux系统中,时间戳(Timestamp)是记录时间的常见方式,通常表示自1970年1月1日00:00:00 UTC(协调世界时) 起经过的秒数(或毫秒/纳秒),以下是详细的操作指南和原理说明:时间戳转人类可读日期基本转换(秒级时间戳)date -d @时间戳示例:date -d @1650000000……

    2025年6月17日
    14400
  • 如何修改linux中的日期

    Linux中,可以使用date命令修改系统日期,格式为`sudo date MMDD

    2025年8月19日
    11300
  • Linux环境下升级JDK到指定版本的操作步骤是什么?

    在Linux系统中升级JDK版本是Java开发中的常见操作,涉及旧版本卸载、新版本安装及环境变量配置等步骤,以下是详细操作流程,涵盖不同安装场景及注意事项,升级前的准备工作确认当前JDK版本打开终端,执行以下命令查看当前系统安装的JDK版本:java -versionjavac -version若仅显示java……

    2025年9月21日
    8900

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信