.
1. 介绍
在使用 Linux 时,常常需要检查服务状态或查看正在运行的进程列表。在这种情况下,systemctl 命令非常有用。
该命令配合 systemd(现代 Linux 发行版使用的启动系统和服务管理器)工作。它提供了丰富的功能,包括检查服务(单元)状态、启动、停止、重启服务以及显示服务列表等。
从 “systemctl 服务列表” 的角度来看,你不仅可以查看当前活跃的服务,还可以看到已禁用的服务以及配置为自动启动的服务,从而多角度了解系统整体配置。
本章节简要说明 systemctl 是什么,并概述本文将要学习的内容。
systemctl 是什么?
systemctl 是在基于 systemd 的 Linux 发行版上,用于控制和检查各种 “单元”(如服务、目标、挂载点)的标准工具。
例如,它可用于启动或停止 Apache(httpd)和 SSH 等服务,并以列表形式显示它们的状态。
systemd 与 systemctl 的关系
systemd 是负责 Linux 启动过程和服务管理的核心机制,取代了 SysVinit、Upstart 等旧系统。与 systemd 交互的命令行工具就是 systemctl。
换句话说,如果 systemd 是指挥中心,systemctl 则是下达指令的操作员。
本文将教会你什么
本文将回答以下问题:
- 如何查看当前正在运行的服务列表?
- 如何显示所有服务(包括未激活的)?
- 如何检查某个服务是否在启动时自动启动?
- 如何解读服务列表的输出?
为了让 Linux 初学者更易理解,文中提供了详细的命令示例和输出说明。
2. 使用 systemctl 显示服务列表的方法
在 Linux 系统管理中,快速了解服务列表极为重要。借助 systemctl 命令,你可以轻松查看活跃服务、非活跃服务以及启动配置情况。
本节从以下三个视角说明服务列表的获取方法:
- 活跃服务列表
- 所有服务列表(包括非活跃的)
- 服务单元文件列表(包括启动设置)
2.1 显示当前活跃的服务列表
要检查当前正在运行的服务,请使用以下命令:
systemctl list-units --type=service
该命令会列出活跃的服务。输出包含以下字段:
| Field | Description |
|---|---|
| UNIT | Service name (e.g., ssh.service) |
| LOAD | Whether the unit file is loaded |
| ACTIVE | Service state (e.g., active, inactive, failed) |
| SUB | More detailed status (e.g., running, exited, dead) |
| DESCRIPTION | Service description |
这些信息可以帮助你判断例如 nginx 是否在运行,或哪些服务当前处于活跃状态。
2.2 显示包括非活跃服务在内的全部服务
默认情况下,list-units 只显示活跃服务。若要同时显示非活跃服务,需要添加 --all 选项。
systemctl list-units --type=service --all
这样即可显示未启动过或已停止的服务。
你还可以使用 --state= 选项按服务状态进一步过滤结果:
systemctl list-units --type=service --state=inactive
当你只想查看已停止的服务时,这非常有用。
2.3 查看服务单元文件列表
要检查哪些服务在启动时被启用或禁用,请使用以下命令:
systemctl list-unit-files --type=service
该命令会列出所有服务单元文件及其启用/禁用状态。
| STATE | Description |
|---|---|
| enabled | Automatically starts at boot |
| disabled | Does not start automatically |
| static | Cannot be enabled or disabled manually |
| masked | Explicitly disabled and cannot be started |
通过此列表,你可以直观地了解哪些服务会在系统启动时自动启动,以及哪些服务被错误地屏蔽(masked)。
3. 使用 systemctl 进行基础服务管理
systemctl 命令允许你启动、停止、重启服务,并配置启动行为。
3.1 启动服务
sudo systemctl start service-name
示例:
sudo systemctl start httpd.service
3.2 停止服务
sudo systemctl stop service-name
示例:
sudo systemctl stop sshd.service
3.3 重启服务
sudo systemctl restart service-name
示例:
sudo systemctl restart nginx.service
3.4 检查服务状态
systemctl status service-name
示例:
systemctl status mysql.service
3.5 启用自动启动
sudo systemctl enable service-name
示例:
sudo systemctl enable docker.service
3.6 禁用自动启动
sudo systemctl disable service-name
示例:
sudo systemctl disable cups.service
3.7 检查启动状态
systemctl is-enabled service-name
enabled
4. 有用的 systemctl 选项和高级技巧
4.1 列出服务依赖关系
systemctl list-dependencies service-name
4.2 查看单元文件内容
systemctl cat service-name

4.3 重新加载单元文件
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
4.4 查看服务日志
journalctl -u service-name
5. 常见问题和故障排除
5.1 服务启动失败时
systemctl status service-name
journalctl -xe
5.2 理解 status 输出中的错误消息
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
Active: failed (Result: exit-code)
5.3 服务启动后立即停止
- 配置错误
- 端口冲突
- 缺少文件或目录
- 权限不足
5.4 服务被屏蔽时
sudo systemctl unmask service-name
6. 总结
服务管理是 Linux 系统操作的重要组成部分,而 systemctl 在控制和理解系统服务方面发挥着核心作用。
7. 常见问题解答 (FAQ)
本节回答关于 systemctl 和服务管理的常见问题。
Q1. systemctl 和 service 命令有什么区别?
A1.
systemctl 是一个专为基于 systemd 的系统设计的服务管理命令,是大多数现代 Linux 发行版(如 Ubuntu、CentOS 和 Fedora)使用的标准工具。
相比之下,service 命令用于较旧的基于 SysVinit 的系统。虽然它可能仍因兼容性原因存在,但在 systemd 环境中强烈推荐使用 systemctl。
Q2. list-units 和 list-unit-files 有什么区别?
A2.
list-units显示当前加载的单元,即正在运行或最近使用过的服务。list-unit-files显示所有单元文件及其启用状态(启用、禁用等)。简而言之,一个显示当前活动的项目,而另一个显示服务的配置方式。
Q3. 静态状态的服务可以启动吗?
A3.
是的,处于 static 状态的服务可以使用 start 手动启动。但是,它们无法启用在引导时自动启动。
这是因为静态服务设计为作为其他单元的依赖项启动。
Q4. 服务被屏蔽无法启动。我该怎么办?
A4.
被 masked 的服务完全禁用,无法启动。要解决此问题,请使用以下命令取消屏蔽服务:
sudo systemctl unmask service-name
取消屏蔽后,您可以正常启动服务。
Q5. 有没有图形界面方法查看服务状态?
A5.
根据发行版的不同,诸如 gnome-system-monitor、KSysGuard 或 Cockpit 等工具允许您通过图形界面查看服务状态。
然而,对于诸如在引导时启用或禁用服务等高级操作,systemctl 仍然是最可靠的方法。
Q6. 我应该将自定义单元文件放置在哪里?
A6.
自定义单元文件通常放置在 /etc/systemd/system/ 中。在编辑或添加单元文件后,始终运行以下命令:
sudo systemctl daemon-reload
然后,您可以使用 start 或 enable 正常管理服务。


