如何使用Systemd命令在GNU/Linux中查找正在运行的服务

如何使用Systemd命令在GNU/Linux中查找正在运行的服务

在GNU/Linux系统中,Systemd 已成为主流的初始化系统和服务管理器,特别是在诸如 Ubuntu、Debian、CentOS、Fedora 等发行版中广泛应用。理解并掌握 Systemd 命令对系统管理员和开发者来说至关重要。本文将深入讲解如何使用 Systemd 命令来查找和管理正在运行的服务,并结合实操示例帮助你更好地理解和应用。

Systemd 是一款基于 `systemctl` 命令的服务和系统管理工具,提供了强大的进程管理、启动控制、日志记录等功能。它的核心是 `systemd` 进程,PID (进程ID) 为 1,是系统启动后第一个运行的进程。

Systemd 的主要特点

  • 并行化服务启动,提升系统启动速度
  • 基于依赖关系的服务管理机制
  • 通过 `journalctl` 提供统一的日志系统
  • 支持快照(snapshot)、服务状态检查等高级功能

查找正在运行的服务的Systemd命令

使用 Systemd 查找当前正在运行的服务可以通过以下命令来实现:

1. 查看所有正在运行的服务

systemctl list-units --type=service

示例输出:

UNIT LOAD ACTIVE SUB DESCRIPTION
cron.service loaded active running Regular background program processing daemon
dbus.service loaded active running D-Bus System Message Bus
networking.service loaded active exited Raise network interfaces
ssh.service loaded active running OpenBSD Secure Shell server

解释:

  • `UNIT`:服务的名称
  • `LOAD`:表示服务是否已加载 (`loaded` 表示已加载)
  • `ACTIVE`:当前服务的活动状态 (`active` 表示正在运行)
  • `SUB`:更详细的活动状态 (如 `running`、`exited` 等)
  • `DESCRIPTION`:服务的简要描述

2. 仅显示正在运行的服务

如果你只想查看当前正在运行的服务,可以使用以下命令:

systemctl list-units --type=service --state=running

示例输出:

UNIT LOAD ACTIVE SUB DESCRIPTION
cron.service loaded active running Regular background program processing daemon
sshd.service loaded active running OpenBSD Secure Shell server

3. 查看特定服务状态

要查看某个具体服务(如 `nginx`)的状态:

systemctl status nginx

示例输出:

● nginx.service A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2025-03-10 10:30:01 UTC; 2h 5min ago
Main PID: 1045 (nginx)
Tasks: 3 (limit: 4915)
Memory: 5.2M
CGroup: /system.slice/nginx.service
├─1045 nginx: master process /usr/sbin/nginx
└─1046 nginx: worker process

关键点:

  • `Loaded` 表示服务配置文件已正确加载
  • `Active` 表示服务的当前状态 (如 `active (running)` 表示正在运行)
  • `Main PID` 指向主进程 ID,便于使用 `kill` 命令快速停止进程
  • `Tasks` 显示当前服务运行的子任务数
  • `Memory` 表示服务的内存使用量

4. 按照状态筛选服务

Systemd 提供了多种状态筛选参数:

  • `running`:正在运行的服务
  • `exited`:已成功退出的服务
  • `failed` :失败的服务
  • `inactive` :未启动或已停止的服务

示例:查看所有失败的服务

systemctl list-units --type=service --state=failed

5. 查找服务是否已启动(活跃)

使用 `is-active` 命令来快速判断某个服务是否正在运行:

systemctl is-active nginx

输出结果:

  • `active` 表示服务正在运行
  • `inactive` 表示服务已停止
  • `failed` 表示服务启动失败

6. 查找服务是否已启用(开机启动)

systemctl is-enabled nginx

输出结果:

  • `enabled` 表示服务已启用(开机启动)
  • `disabled` 表示服务未启用
  • `masked` 表示服务已被屏蔽,无法启动

7. 列出所有已安装但未运行的服务

systemctl list-units --type=service --state=inactive

8. 查看服务启动失败的原因

使用以下命令可详细分析失败原因:

journalctl -xe

或查看特定服务的日志:

journalctl -u nginx.service

实践案例

示例 1:快速查找并重启失败的服务

假设 `mysql` 服务意外停止,以下是快速解决的步骤:

1. 查找失败的服务

systemctl list-units --type=service --state=failed

2. 查看 `mysql` 状态

systemctl status mysql

3. 重启 `mysql` 服务

sudo systemctl restart mysql

4. 验证 `mysql` 是否正常运行

systemctl is-active mysql

示例 2:设置服务的开机启动

假设你希望 `nginx` 在系统启动时自动启动:

1. 启用服务的开机启动

sudo systemctl enable nginx

2. 立即启动 `nginx` 服务

sudo systemctl start nginx

3. 验证服务是否已启用

systemctl is-enabled nginx

示例 3:禁用和屏蔽服务

禁用 `apache2` 服务 (防止开机启动)

sudo systemctl disable apache2

完全屏蔽 `apache2` 服务 (阻止手动或自动启动)

sudo systemctl mask apache2

解除屏蔽

sudo systemctl unmask apache2

常见问题及解决方法

  • 服务启动失败:使用 `journalctl -xe` 检查日志
  • 无法启动服务:检查 `systemctl status` 输出中的 `CGroup` 信息
  • 服务未按预期启动:确认 `systemd` 配置文件 (`/etc/systemd/system/`) 的正确性
  • 服务重启时提示“Unit not found”:检查服务名是否拼写正确,或使用 `systemctl daemon-reload` 重新加载配置

使用Systemd命令来管理和查找正在运行的服务是一项必备技能,特别是在 GNU/Linux 系统的日常维护中。本文介绍了如何使用 `systemctl` 命令进行服务查询、筛选、状态检查等操作,同时结合了具体示例,帮助你快速上手并解决常见问题。如果你想进一步提升对 Systemd 的掌握,可以深入研究其单元文件 (`unit files`)、依赖管理机制以及 `journalctl` 日志工具,以更高效地维护你的 Linux 系统。

未经允许不得转载:A5数据 » 如何使用Systemd命令在GNU/Linux中查找正在运行的服务

相关文章

contact