服务与 shutdown.target 不冲突的影响

kkm*_*ses 5 systemd

< TL;DR >
\n我正在基于当前的 Debian 10 Buster 和内核 ntfsd 调整仅限 NFSv4 的文件服务器;系统 v241。该nfs-kernel-server发行版中的软件包的 systemd 脚本让我觉得有点奇怪。根据 systemd.service(5),一些服务定义文件(包括其nfs-server.service本身)附带设置DefaultDependencies=no,以便该单元不会自动获取依赖项:Conflicts=shutdown.target

\n
\n

[使用DefaultDependencies=yes][s]服务单元将具有类型Conflicts=Before=上的依赖性[...] shutdown.target。这些确保在系统关闭之前正常服务单元被彻底终止。

\n
\n

与我在其他 systemd 自己的软件包中看到的不同,这些都没有明确提供。命令

\n
systemctl show nfs-server.service | egrep '^(Want|Requ|Bind|Bound|Before|After|Confl)'\n
Run Code Online (Sandbox Code Playgroud)\n

证实这实际上是正确的:不存在这样的依赖关系。手册继续,

\n
\n

只有涉及早期启动或延迟系统关闭的服务才应禁用此选项。

\n
\n

NFS 服务器恰恰不是这样,因为在网络完全启动之前它无法开始提供服务,并且一旦系统开始关闭,它就应该停止接受新请求并在负载下停止。

\n

这不是软件包中具有类似设置的单个服务,但这一项是我最担心的。我正在云设置中推出单一用途的虚拟机,文件服务器可能拥有大量的 RAM (64-128G),所有这些都被文件系统缓存塞满了,如 htop(1) 所示。由于这是一台文件存储机器,我无法用言语来表达我多么希望服务器,引用手册, \xe2\x80\x9c 在系统关闭之前干净地终止,\xe2\x80\x9d 特别是鉴于我用导出文件系统的 ext4 挂载选项data=writeback和\xc2\xb9牺牲了一点可靠性来换取性能nobarrier
\n</ TL;DR >

\n

所以我的问题归结为一句话是:

\n

当系统实际上关闭时,不具有Conflicts=Before=依赖性的systemd 服务会发生什么情况?shutdown.target

\n
\n

\xc2\xb9 这是一个经过深思熟虑的工程权衡,根据云提供商的 SLA 和一系列性能测试的结果进行评估,并且与问题的本质完全无关。

\n