使用SYSTEMCTL RESTART命令重新启动服务
systemd是一个在Linux上广泛使用的系统服务管理器。要管理systemmd服务,使用systemctl命令行实用程序。此工具还用于重新启动任何systemd服务。
Linux上的服务通过它们的配置文件进行管理。如果对服务的配置文件进行了修改,则必须启动服务的重新启动以应用修改。重新启动服务后,systemd重新评估配置文件并应用修改。
在本指南中,我将介绍如何使用systemctl在Linux中重新启动服务。
注意:本指南包括在Ubuntu 22.04上执行的命令和指令。该命令在system d服务管理器附带的发行版上可以正常工作。
systemctl restart命令
重新启动命令实质上是停止服务,然后再次启动它。如果服务或设备未运行,重新启动命令将启动其操作。
重新启动命令不会删除链接到该服务的进程。以文件描述符为例,它是操作系统分配给服务打开的文件的非负标识符。如果重新启动服务,则在重新启动过程中,链接到该服务的文件描述符将保留在那里。
如果您想清除所有链接到服务的进程,那么您需要显式地停止服务并重新启动它。
如何重新启动服务
在Linux上,您可以使用带有restart选项的sudo systemctl命令行工具并指定其名称来重新启动服务。一般语法如下:
sudo systemctl restart [service—name]
您需要sudo权限才能重新启动服务。
例如,让我们重新启动ssh服务。
Sudo system ctl重启ssh.service
若要重新启动多个服务,请在restart命令后面添加空格。
sudo systemctl restart ssh. service smbd. service
其他重启命令如下表所示:
尝试-重新启动 | 它停止或启动指定的一个或多个服务,如果服务没有运行,它不会启动它 |
重新加载或重新启动 | 重新加载受支持的一个或多个服务,如果不支持该服务,则重新启动并激活该服务 |
尝试重新加载或尝试重新启动 | 重新加载受支持的一个或多个服务,如果该服务不受支持,则在不激活它的情况下重新启动它 |
在上面的命令中,. service扩展名是可选的。
如何自动重启服务
在Linux上,如果服务失败,则默认情况下,系统d会重新启动它。尽管如此,在许多情况下,可能需要修改服务重新启动的方式。例如,在定制服务的调试过程中可能需要手动操作。
systemd单元文件或服务文件位于/etc/systemd/system或/lib/systemd/system上,主要取决于服务的创建方式。要列出Linux上的单元文件,请使用以下命令:
ls/lib/systemd/system
您可以看到不同服务的配置文件。让我们使用nano编辑器打开ssh. service文件。
sudo nano/lib/systemd/system/ssh. service
您可以在这里修改重新启动设置。默认情况下,它被设置为on—failure。以下列出了重新启动服务的其他选项:
- 没有
- 总是
- 成功
- 接通故障
- 亮起-异常
- 中止时
- 接通监视器
设备服务文件中的另一个选项是RestartSec,用于指定服务将重新启动的秒数。
[服务]
重新启动=始终
重新启动安全=5
这些说明意味着服务将在启动时重新启动,如果中断,将在5秒后重新启动。
修改设置后,执行以下命令以应用更改。
Sudo系统ctl重新加载守护进程
其他需要考虑的重要设置包括StartLimitIntervalSec和StartLimitBurst。这些选项可用于设置重新启动服务的最长时间和最长重试次数。
【单位】
开始限制间隔秒= 300
StartLimitBurst = 4
上述指令表明,如果服务在300秒后没有启动,系统将自动停止尝试重新启动服务,并重试4次。
要验证服务是否在5秒后重新启动,请使用服务的PID和kill命令来终止服务。
SUDO KILL-9[PID]
5秒后,服务将重新启动;使用Journal alctl命令检查ssh.service的状态。
Jouralctl-u ssh.service
如何在从属服务重新启动时重新启动服务
在Linux上,许多服务是相互依赖的,同样,当一个依赖的服务重新启动时,它们也需要重新启动。
在单元服务文件中有三个不同的选项来重新启动服务,并重新启动依赖服务。
- 部分
- BindsTo
- 要求
所有这些选项执行相同的任务。
让我们以ssh. service为例,它依赖于apparmor. service;一个Linux安全模块提供必要的访问。要列出Linux中服务的依赖项,请使用systemctl和list—dependencies命令和服务名称。
systemctl列表依赖关系ssh. service
因此,如果您想在重新启动apparmor. service时重新启动ssh. service,则需要在apparmor. service文件的[Unit]部分中包含PartOf、BindsTo或Requires选项以及服务名称。
打开apparmor. service文件。
Sudo Nano/lib/system d/system/apapmor.service
在[单位]部分添加以下行。
PartOf = ssh. service
保存文件并执行daemon—reload命令。
sudo systemctl守护进程
现在,重新启动ssh.service,然后检查apparmor. service日志。
您将注意到apparmor.服务在ssh.服务重新启动的同时重新启动。
结论
要在Linux上重新启动一个或多个服务,systemctl命令与restart选项一起使用。systemctl是用于管理systemd服务的命令行实用程序。重新启动选项启动一个服务,然后停止它,激活一个非活动的服务。但是,您可以使用try—restart选项在不激活服务的情况下重新启动服务。