Systemd 单元文件 - WantedBy 和 After

Ger*_*den 11 linux systemd services systemd-unit

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

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

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

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

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

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

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

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

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

我误解了什么吗?

Cod*_*ing 10

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

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

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

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

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