重启/关闭期间停止 Linux 服务的顺序

重启/关闭期间停止 Linux 服务的顺序

在运行 Centos 7.5 的 KVM VM 上,我运行了一个写入 NFS 挂载文件系统的服务。当发出关机或重启命令时,该服务会抛出异常,表明它无权写入此 NFS 文件系统上的目录。如果我使用 systemctl 手动停止该服务,则服务会正常完成,即不会抛出任何异常。由于出现异常,我推测在我的服务将其最终数据写入 NFS 挂载之前,操作系统正在关闭 NFS 服务,从而删除已挂载的卷。当服务尝试写入此位置时,由于目录已消失,因此无法写入。在告知用户服务停止之前,NFS 挂载会被删除吗?

奇怪的是,我有两个版本的虚拟机。这个有问题的版本有一个 LUKS 加密的根分区。另一个虚拟机有相同的代码,但在未加密的分区上运行。两个虚拟机上的操作系统都是一样的。我不明白为什么这会引发这个问题,但这是虚拟机中唯一的区别。

有什么方法可以确保在 NFS 被终止之前我的服务已经完成?

答案1

Systemd 尽可能并行启动和停止服务。与 systemd 之前的 Linux 发行版相比,这就是它能够如此快速地完成这两项工作的原因。当某项服务需要其他服务或资源时,需要在该服务的单元文件中明确声明,以便 systemd 能够正确排序它们。如果不这样做,您就无法可靠地预测您的服务所需的资源是否会在您的服务仍在尝试使用它时不可用。

根据您的具体情况,您可以使用RequiresMountsFor=指定单元需要在给定挂载点挂载文件系统。这包含在本[Unit]节中。

[Unit]
RequiresMountsFor=/path/to/mountpoint

通过此声明,您的服务将不会启动,直到文件系统挂载到该挂载点,并且将在文件系统卸载之前停止。

相关内容