
在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 系统。











