管理现代 Linux PC 上的服务或服务组可能会很麻烦,即使你不确定自己在做什么。幸运的是,Ubuntu Systemctl 已经为您提供了管理 Linux PC 上服务的解决方案。
在本教程中,您将学习如何通过运行不同的 systemctl
命令来管理 Ubuntu PC 上的 Systemd 服务。
准备好了吗?开始吧!
先决条件
本教程将进行实践演示,但不需要特殊工具,只要您使用的是 Ubuntu 16 或更高版本,就可以进行。本教程使用的是 Ubuntu 20.04.3 LTS 版本进行演示。
什么是 Ubuntu Systemctl?
在运行 Ubuntu systemctl 命令之前,首先了解一下 Systemctl 是什么。Systemctl 是一个命令行实用程序,用于控制和管理 systemd 和系统服务。
简而言之,Systemctl 是一个控制面板或服务管理器,用于 systemd init 系统,在 Linux 内核引导后初始化组件。Systemctl 是一个可以用来管理服务的库、守护进程和实用工具集。
为了有效地管理服务,请了解以下不同的服务状态:
- 已启用 – 表示服务已配置为在系统启动时启动。
- 已禁用 – 表示服务已配置为在系统启动时不启动。
- 活动 – 表示服务当前处于运行状态。
- 非活动 – 表示服务目前未运行,但在某些应用程序尝试启动该服务时可能会启动。
列出所有服务
现在你了解了服务的不同状态,也许你想看到你的 Ubuntu PC 上所有服务的列表。列出所有服务提供了一些信息,为你管理服务做好了准备。
打开你的终端并运行以下命令以列出所有 服务单元(list-units
)(活动的、运行中的、已退出的或失败的),服务设置为单元类型(--type=service
)。
从列表中选择你想在本教程后面管理的任何服务,并记下 单元 名称(例如,apache2)。按空格键向下滚动,或按“Q”键退出命令。
顺便说一句,这里有一个关于 Linux Shell 脚本编写 的好指南。

列出具体状态的服务
与列出所有服务不同,也许你想要缩小服务列表。如果是这样,添加--state
参数就可以了,它会根据你指定的特定状态来过滤服务。
运行以下任一命令来列出所有活动服务(--type=service --state=active
),包括正在运行和已退出的服务。

同样地,要仅列出已退出或正在运行的服务,将状态值从active
更改为running
或exited
,如下命令所示:


列出已启用的服务
除了列出活动的、正在运行的和已退出的服务外,您还可以通过将grep
命令与管道连接来列出已启用和已禁用的服务。
运行以下任一命令来列出禁用
或启用
服务(--type=service
)。
请注意已启用的服务,如下所示,您稍后需要它来禁用一个服务,但本教程使用 acpid.service 进行演示。 acpid 是一个可扩展的守护进程,支持 高级配置和电源接口(ACPI) 事件。

列出服务属性
除了列出服务外,您可能想要检查服务的属性。了解服务属性对于故障排除、进程参数或重启行为非常方便。
运行以下命令以 显示
服务(acpid.service
)的属性,以键=值格式显示。

现在,如果您只想查找特定的服务属性,可以使用带有属性名称的 -p
标志。
运行以下命令以 显示
服务(acpid.service
)的 MainPID
属性。

管理特定服务
既然列出服务的基础知识已经了解,现在是时候通过运行 systemctl stop
和 start
命令来管理特定的(单个)服务了。
Apache 服务(apache2)用于以下演示,但您可以自由管理“列出所有服务”部分中提到的服务。但在停止或启动服务之前,您首先需要验证服务的状态。
在终端上运行以下命令以查看apache2
服务的详细信息,例如其status
。
如下所示,您可以看到apache2服务处于活动状态且正在运行。

在查看服务状态时不需要输入sudo密码,因为您没有更改服务状态。但如果您启动、停止或重新启动服务,则必须在命令前加上sudo命令并输入sudo密码。
停止一个服务
也许您想要停止一个仍在后台运行的服务。在这种情况下,systemctl stop
命令是您需要的。运行以下systemctl
命令以停止apache2
服务。
如果您希望同时停止多个服务,请指定以空格分隔的每个服务,例如:
sudo systemctl stop sshd apache2
。在此命令中,您将一次停止sshd和apache2服务。
现在运行systemctl status
命令,就像您之前验证apache2服务是否已停止一样。
您可以看到下面apache2服务的状态已更改为inactive (dead),这表示服务已停止。

开始一个服务
现在如果您注意到某项服务根本没有运行,该如何启动该服务呢?您可以运行类似于停止服务的命令,即systemctl start
命令。运行以下命令来启动
apache2
服务。
就像停止多个服务一样,您也可以在一条命令中启动多个服务。将
stop
命令替换为start
命令,如下所示:sudo systemctl start sshd apache2
现在再次运行systemctl status
命令,以验证apache2
服务是否正在运行。
如果您看到如下所示的active (running)状态,则说明一切都准备就绪,因为服务已经恢复运行。

如果您喜欢一开始就重新启动服务,而不必先停止它。如果是这样,请使用
systemctl restart
命令,像这样:sudo systemctl restart apache2
启用或禁用服务
也许有某项特定的服务您希望在系统启动时启动或阻止启动。如果是这样,运行systemctl
enable
或 disable
命令是最佳方法。
enable
子命令允许您配置系统的默认启动设置,而disable
子命令则阻止服务在系统启动时运行。
运行以下命令来禁用你在“列出已启用服务”部分中注意到的服务(`acpid.service`)。输入你的sudo密码以授权运行该命令。

现在,因为`acpid.service`支持操作系统指导的配置和电源管理(OSPM);你需要重新启用它。启用服务的命令与禁用服务的命令类似。
执行以下命令来启用`acpid.service`。该命令将该服务重新注册到你系统的默认启动设置中。

结论
在本教程中,你已经了解到通过运行Ubuntu `systemctl` 命令可以多快地停止、启动或重新启动服务。你也学会了 `systemctl` 命令不仅可以管理一个,而且可以同时管理多个服务。
有了这些新的知识,为什么不自动化控制你Ubuntu系统中的服务呢?