Systemd 单元文件 - WantedBy 及之后

Systemd 单元文件 - WantedBy 及之后

我有一个关于为 Systemd 制作自己的单元(服务)文件的问题。

我已阅读文档并有一些问题。经过搜索后,我发现这个非常有用的答案,它提供了有关我遇到的一些问题的一些详细信息。

如何编写运行 systemd-tmpfiles 的 systemd .service 文件

虽然我发现这个答案很有用,但仍有一部分我不明白。主要是这部分:

由于我们实际上希望该服务稍后而不是更快运行,因此我们指定一个“After”子句。这实际上不需要与 WantedBy 目标相同(通常不是)

我对 After 的理解是它非常简单。该服务(或您定义的任何内容)将在 After 中列出的单元之后运行。

同样,WantedBy 看起来也很简单。您正在定义您列出的单位对您的服务有需求。因此,对于多用户或图形等目标,您的单元应该运行,以便 systemd 认为已达到目标。

现在,假设到目前为止我对这些声明如何工作的理解是正确的,我的问题是:为什么在 After 和 WantedBy 子句中列出相同的单位会起作用?

例如,在我看来,定义一个 After multi-user.target 和 WantedBy multi-user.target 的单元会导致一种不可能的情况,即该单元需要在达到目标后启动,但也需要为被视为“达到”的目标而开始。

我误解了什么吗?

答案1

手册讨论了/和/ /之间systemd的关系BeforeAfterRequiresWantsBindtoBefore=, After=部分:

请注意,此设置独立于并正交于 Requires=、Wants= 或 BindsTo= 配置的需求依赖项。在 After= 和 Requires= 选项中包含单位名称是一种常见的模式,

After并不意味着WantsWantedBy,也不与这些设置冲突。

如果两个单元都被触发启动,After将影响顺序,无论依赖链如何。

如果列出的模块After不在依赖关系链中的某个位置,则不会加载它,因为After并不意味着任何依赖关系。

答案2

WantedBy不影响服务启动的顺序。如中所述systemd 单元手册,在WantedByRequiredBy描述中:

这具有将 Wants= 或 Requires= 类型的依赖项从列出的单元添加到当前单元的效果。

然后在Wants描述中它指出它是Requires它所指出的较弱版本:

请注意,需求依赖性不会影响服务启动或停止的顺序。

相关内容