Systemd 单元文件中 Wants= 与 WantedBy= 的最佳实践

Systemd 单元文件中 Wants= 与 WantedBy= 的最佳实践

据我从文档中可以看出系统Wants=WantedBy=执行相同的功能,只不过前者放入依赖单元文件中,反之亦然。 (然后WantedBy=创建unit.type.wants目录并用符号链接填充它。)

DigitalOcean:了解 Systemd 单元和单元文件

该指令...允许您以与该部分中的指令WantedBy=类似的方式指定依赖关系。不同之处在于,该指令包含在辅助单元中,允许列出的主要单元保持相对干净。Wants=[Unit]

这真的只是为了保持单元文件“干净”吗?使用这两个指令的最佳实践是什么?也就是说,如果服务 alpha “想要”服务 beta,我应该何时使用Wants=beta.serviceinalpha.service以及何时应该WantedBy=alpha.service在 中使用beta.service

答案1

功能上

Wants位于Unit部分 且WantedBy位于Install.

init 进程根本systemd不处理/使用该Install部分。相反,必须在 中创建符号链接multi-user.target.wants。通常,这是由systemctl读取该部分的实用程序完成的Install

总之,WantedBysystemctl enable/影响systemctl disable

逻辑上

考虑哪些服务应该“知道”或“意识到”另一个服务。例如,常见的用法是WantedBy

[Install]
WantedBy=multi-user.target

或者,也可以在 multi-user.target 中:

[Unit]
Wants=nginx.service

但第二种方式没有意义。从逻辑上讲,nginx.service 知道系统定义的 multi-user.target,而不是相反。

因此,在您的示例中,如果 alpha 的作者知道 beta,那么 alphaWants就是 beta。如果 beta 的作者知道 alpha,那么 beta 就是WantedByalpha。

为了帮助您做出决定,您可以考虑可以在不存在其他服务的情况下安装哪个服务(例如,从包管理器)。

配置目录

作为您盒子中的另一个工具,请知道 systemd 文件也可以使用配置目录进行扩展: /etc/systemd/system/myservice.service.d/extension.conf

这允许您添加依赖项,其中两个服务最初都不是为了了解另一个服务而创建的。我经常将其与挂载一起使用,例如,nginx 和挂载都不需要明确了解对方,但我作为系统管理员了解依赖性。所以我nginx.service.d/mymount.confWants=mnt-my.mount.

答案2

这些在功能上并不相同。设置Wants=(和符号链接文件)是依赖项。该WantedBy=设置控制启用/禁用服务时此类依赖项的创建/销毁。

所以没有最好的实践。有正确的实践。对于任何给定情况,两者中只有一个具有正确的功能。要么想要拥有一种始终存在的持久依赖关系,要么想要拥有一种可以使用enable/打开和关闭的暂时依赖关系disable

相关内容