首页 > 运维 > linux运维 > 正文

Linux如何列出所有正在运行的服务

P粉602998670
发布: 2025-09-07 08:25:01
原创
1010人浏览过
答案:使用systemctl list-units --type=service --state=running命令可列出Linux系统中由systemd管理的正在运行的服务,该命令适用于CentOS 7/8、Ubuntu 16.04+等现代发行版,能清晰展示服务名称、状态及描述,是查看运行服务的首选方法。

linux如何列出所有正在运行的服务

在Linux系统上,要列出所有正在运行的服务,最直接有效的方法是使用

systemctl list-units --type=service --state=running
登录后复制
命令。这个命令会清晰地展示那些由systemd管理且当前处于活动状态(running)的服务单元。它能帮你快速掌握系统当前的服务运行概况,是现代Linux发行版(如CentOS 7/8, Ubuntu 16.04+等)的首选工具

解决方案

在我日常维护Linux服务器时,发现列出运行中的服务是一个非常基础但又频繁的操作。不同的场景和系统版本,我们可能会用到不同的命令,但核心目标都是一样的:了解系统当前有哪些后台任务在默默工作。

首先,对于大多数现代Linux发行版,

systemd
登录后复制
是无可争议的服务管理器。它强大、高效,而且功能全面。要查看所有正在运行的服务,我会首选
systemctl
登录后复制

systemctl list-units --type=service --state=running
登录后复制

这条命令的输出通常包括服务名称(UNIT)、加载状态(LOAD)、活动状态(ACTIVE)、子状态(SUB)以及简短描述。

LOAD
登录后复制
显示单元文件是否成功加载,
ACTIVE
登录后复制
是关键,它告诉我们服务是否处于活动状态,而
SUB
登录后复制
则提供了更细致的运行状态,比如
running
登录后复制
就表示服务正常运行。

有时候,我可能想看所有服务,无论它们是否运行,以便了解系统可能启动的服务有哪些,这时我会用:

systemctl list-units --type=service --all
登录后复制

然后通过

grep running
登录后复制
来过滤,或者直接观察
ACTIVE
登录后复制
列。这种方法的好处是,即使某个服务目前没有运行,你也能看到它的存在,并进一步检查它的状态或日志。

对于一些较老的系统,或者那些仍然依赖

SysVinit
登录后复制
Upstart
登录后复制
的发行版(虽然现在很少见了),
service
登录后复制
命令可能更熟悉:

service --status-all
登录后复制

这个命令会列出所有通过

SysVinit
登录后复制
脚本管理的服务,并用
[ + ]
登录后复制
表示运行中,
[ - ]
登录后复制
表示停止,
[ ? ]
登录后复制
表示状态未知或无法确定。不过,它的输出格式通常不如
systemctl
登录后复制
那么规范和易读,而且无法管理
systemd
登录后复制
原生的服务单元。

最后,如果你想从更底层的进程角度去理解,

ps
登录后复制
命令配合
grep
登录后复制
也是一个办法,但它更多是列出进程,而不是“服务”:

ps aux | grep -i 'service_name'
登录后复制

例如,要查看Apache进程,你可以

ps aux | grep httpd
登录后复制
。但这需要你知道服务的具体进程名,而且一个服务可能由多个进程组成,所以它不如
systemctl
登录后复制
那样能直接反映“服务”的抽象概念。我通常在怀疑某个服务进程卡死,或者想确认某个特定进程是否存在时才用
ps
登录后复制

如何区分不同类型的服务管理工具?

在Linux的世界里,服务管理工具的演变本身就是一段有趣的历史,也常常让人感到困惑。我个人觉得,理解它们之间的差异,对于我们高效管理系统至关重要。

最主要的两种服务管理体系是

SysVinit
登录后复制
systemd
登录后复制

SysVinit
登录后复制
是老牌的服务管理器,它基于传统的Unix System V init脚本。在
SysVinit
登录后复制
时代,每个服务通常对应
/etc/init.d/
登录后复制
目录下的一组shell脚本。系统启动时,会按照预定义的运行级别(runlevel)顺序执行这些脚本,依次启动服务。它的优点是简单直观,脚本都是可读的shell脚本,容易理解和修改。但缺点也很明显:服务启动是串行的,效率低下;缺乏对服务依赖关系的精细管理;而且对进程的监控能力也比较弱,一个服务崩溃了,可能就停在那里了。我记得以前调试启动问题时,经常要一行行地看脚本输出,效率确实不高。

systemd
登录后复制
则是现代Linux发行版的主流选择,它在设计理念上与
SysVinit
登录后复制
截然不同。
systemd
登录后复制
引入了“单元”(unit)的概念,服务只是其中一种单元(service unit)。它支持并行启动服务,这大大加快了系统启动速度。
systemd
登录后复制
还提供了强大的依赖管理、cgroup集成(用于资源控制)、按需启动服务、日志管理(journald)等一系列高级功能。它的配置文件通常是
.service
登录后复制
文件,位于
/etc/systemd/system/
登录后复制
/usr/lib/systemd/system/
登录后复制
等目录,采用INI风格,结构清晰。
systemctl
登录后复制
是与
systemd
登录后复制
交互的主要命令行工具,它能够管理服务的启动、停止、重启、状态查询,甚至创建自定义单元。对我而言,
systemd
登录后复制
的强大之处在于其统一性和可控性,基本上所有系统级的操作都能通过它来完成。

介于两者之间,还有

Upstart
登录后复制
,它曾是Ubuntu等发行版的默认初始化系统,旨在解决
SysVinit
登录后复制
的一些痛点,比如支持事件驱动和并行启动。但随着
systemd
登录后复制
的崛起,
Upstart
登录后复制
逐渐被取代。

所以,当我们谈论“服务管理工具”时,现在基本上就是指

systemd
登录后复制
和它的
systemctl
登录后复制
。如果你遇到一台非常老的Linux机器,那可能还需要熟悉
service
登录后复制
命令和
/etc/init.d/
登录后复制
目录下的脚本。

如何判断服务是否异常或崩溃?

判断一个服务是否异常或崩溃,这可不只是看它是否“运行中”那么简单。有时候服务虽然显示“running”,但实际上可能已经卡死、资源耗尽或者功能不正常。这就像一个人虽然睁着眼睛,但可能已经神志不清了。

有道小P
有道小P

有道小P,新一代AI全科学习助手,在学习中遇到任何问题都可以问我。

有道小P 64
查看详情 有道小P

我通常会采取多维度的方法来诊断:

  1. systemctl status <service_name>
    登录后复制
    这是我的第一步。这条命令会提供指定服务的详细状态信息,包括它的加载状态、活动状态、进程ID(PID)、内存使用情况,以及最近的几行日志输出。最关键的是要看
    Active:
    登录后复制
    这一行。如果显示
    active (running)
    登录后复制
    ,通常是好的。但如果看到
    active (exited)
    登录后复制
    inactive (dead)
    登录后复制
    failed
    登录后复制
    ,那就说明服务已经停止或崩溃了。特别是
    failed
    登录后复制
    状态,它会明确告诉你服务启动失败或运行中遇到了严重问题。我还会留意
    CGroup:
    登录后复制
    Main PID:
    登录后复制
    ,确认进程是否存在。

  2. journalctl -u <service_name>
    登录后复制
    服务的日志是诊断问题的金矿。
    systemd
    登录后复制
    将所有服务的日志都集中到
    journald
    登录后复制
    中。使用
    journalctl -u <service_name>
    登录后复制
    可以查看特定服务的所有日志。我通常会加上
    -e
    登录后复制
    (查看最新日志)或
    -f
    登录后复制
    (实时跟踪日志),然后寻找关键词,比如
    error
    登录后复制
    failed
    登录后复制
    exception
    登录后复制
    segfault
    登录后复制
    等。这些错误信息往往能直接指出问题的根源,比如配置错误、依赖缺失或者代码bug。

  3. 检查服务自身的日志文件: 很多应用程序服务(例如Web服务器Nginx、数据库MySQL)除了向

    journald
    登录后复制
    报告外,还会将详细的运行日志写入自己的特定文件,通常在
    /var/log/
    登录后复制
    目录下,例如
    /var/log/nginx/error.log
    登录后复制
    /var/log/mysql/error.log
    登录后复制
    。这些日志文件可能包含比
    journalctl
    登录后复制
    更详细的应用层错误信息,对于排查应用层问题至关重要。我会用
    tail -f
    登录后复制
    来实时监控这些日志。

  4. 资源监控: 一个“假死”的服务可能仍然在运行,但却消耗了异常的CPU、内存或I/O资源。我会使用

    top
    登录后复制
    htop
    登录后复制
    free -h
    登录后复制
    iostat
    登录后复制
    等工具来监控系统资源。如果某个服务的进程突然占用大量CPU或内存,或者磁盘I/O异常高,那它很可能陷入了死循环、内存泄漏或其他异常状态。
    ps aux --sort=-%mem | head
    登录后复制
    ps aux --sort=-%cpu | head
    登录后复制
    可以快速找出资源消耗大户。

  5. 网络连接状态: 对于提供网络服务的应用,检查其监听端口是否正常也是一个好方法。

    netstat -tulnp | grep <port_number>
    登录后复制
    ss -tulnp | grep <port_number>
    登录后复制
    可以查看端口是否被监听,以及是哪个进程在监听。如果服务应该监听某个端口但却找不到,那它肯定没有正常启动或已经崩溃。

通过这些方法组合使用,我通常能比较全面地判断一个服务的健康状况,并快速定位问题所在。

在没有图形界面的服务器上,如何高效管理服务?

在没有图形界面的Linux服务器上管理服务,这几乎是每一个Linux系统管理员的日常。我个人觉得,命令行(CLI)虽然初看起来有些生硬,但一旦掌握,它的效率和灵活性是图形界面无法比拟的。

  1. 熟练运用

    systemctl
    登录后复制
    这是基石。所有服务的启动、停止、重启、状态查询、启用/禁用开机自启等操作,都离不开它。例如,
    systemctl start nginx
    登录后复制
    启动Nginx,
    systemctl enable nginx
    登录后复制
    设置开机自启,
    systemctl restart mysql
    登录后复制
    重启MySQL。记住这些基本命令,能让你在管理服务时游刃有余。

  2. 利用

    grep
    登录后复制
    awk
    登录后复制
    进行过滤和格式化:
    systemctl list-units
    登录后复制
    的输出有时会很长,尤其是在服务众多的系统上。这时候,
    grep
    登录后复制
    就是你的好帮手。比如,
    systemctl list-units --type=service --state=running | grep ssh
    登录后复制
    可以快速找到与SSH相关的运行服务。如果需要更复杂的文本处理,
    awk
    登录后复制
    sed
    登录后复制
    能帮你提取特定字段或重新格式化输出,这对于编写自动化脚本尤其有用。

  3. 使用

    tmux
    登录后复制
    screen
    登录后复制
    进行会话管理:
    我经常需要在服务器上同时进行多项操作,或者执行一个耗时较长的命令,又不想断开SSH连接。
    tmux
    登录后复制
    (或者
    screen
    登录后复制
    )就是解决这个问题的利器。它允许你在一个终端会话中创建多个独立的窗口和面板,并且即使SSH连接断开,会话仍然会在服务器后台运行。这样,你可以启动一个日志跟踪命令,然后切换到另一个面板进行其他操作,或者直接退出SSH,下次再连接回来继续工作。这大大提升了工作效率和便利性。

  4. 日志的实时监控与分析:

    journalctl -f
    登录后复制
    tail -f /var/log/some_service.log
    登录后复制
    是我最常用的日志监控命令。在调试服务问题时,实时查看日志输出能帮助我快速发现错误和异常行为。结合
    grep
    登录后复制
    ,可以只显示包含特定关键词的日志行,例如
    journalctl -f -u nginx | grep error
    登录后复制

  5. SSH密钥认证与别名: 频繁登录服务器,每次输入密码是很低效的。配置SSH密钥认证(

    ssh-keygen
    登录后复制
    ssh-copy-id
    登录后复制
    )可以实现无密码登录,既安全又方便。此外,在本地的
    ~/.ssh/config
    登录后复制
    文件中为常用服务器设置别名,例如
    Host myserver
    登录后复制
    Hostname 192.168.1.100
    登录后复制
    User admin
    登录后复制
    ,这样以后只需
    ssh myserver
    登录后复制
    就能登录,进一步简化了操作。

  6. 简单的Shell脚本: 对于一些重复性的检查或管理任务,我会编写简单的Shell脚本来自动化。比如,一个脚本可以检查多个关键服务的运行状态,并在发现异常时发送通知。虽然不是复杂的配置管理工具,但对于个人或小型团队来说,这种轻量级的自动化非常实用。

通过这些命令行工具和技巧,即使没有图形界面,我们也能高效、精准地管理Linux服务器上的各项服务。

以上就是Linux如何列出所有正在运行的服务的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号