0

0

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

P粉602998670

P粉602998670

发布时间:2025-09-07 08:25:01

|

1057人浏览过

|

来源于php中文网

原创

答案:使用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”,但实际上可能已经卡死、资源耗尽或者功能不正常。这就像一个人虽然睁着眼睛,但可能已经神志不清了。

易优cms汽车车辆租赁源码1.7.2
易优cms汽车车辆租赁源码1.7.2

由于疫情等原因大家都开始习惯了通过互联网上租车服务的信息多方面,且获取方式简便,不管是婚庆用车、旅游租车、还是短租等租车业务。越来越多租车企业都开始主动把租车业务推向给潜在需求客户,所以如何设计一个租车网站,以便在同行中脱颖而出就重要了,易优cms针对租车行业市场需求、目标客户、盈利模式等,进行策划、设计、制作,建设一个符合用户与搜索引擎需求的租车网站源码。 网站首页

下载

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

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

  2. journalctl -u 
    服务的日志是诊断问题的金矿。
    systemd
    将所有服务的日志都集中到
    journald
    中。使用
    journalctl -u 
    可以查看特定服务的所有日志。我通常会加上
    -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 
    ss -tulnp | grep 
    可以查看端口是否被监听,以及是哪个进程在监听。如果服务应该监听某个端口但却找不到,那它肯定没有正常启动或已经崩溃。

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

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

在没有图形界面的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服务器上的各项服务。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

661

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

245

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

514

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

253

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

528

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

599

2023.08.14

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.2万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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