我正在写一个 systemd 计时器。我应该为 WantedBy 使用什么值?

Mou*_*inX 7 systemd-timer

在各种示例中,我看到了所有这些不同的选择建议:

  • WantedBy=timers.target
  • WantedBy=multi-user.target
  • WantedBy=basic.target
  • WantedBy=default.target
  • WantedBy=mytimer.target(自定义用户定义名称)

然而,在我发现的例子中,没有提供进一步的解释。

以下页面也没有提供任何对 WantedBy 的解释:

我想了解一种简单的方法,我可以在需要时使用它来编写 systemd 计时器而不是 cron 作业。

*设置一个 cron 作业是 1 行。Systemd 计时器涉及写入两个文件并运行一两个 systemctl 命令。但是,根据我的经验,仅凭这一事实并不一定是使 systemd 计时器比 cron 更难的原因——这是众多选项和(似乎)缺乏清晰的文档以及完整解释的简单示例的原因。

mur*_*uru 8

对于简单的用例,请使用WantedBy=timers.target. 见man systemd.special

timers.target

一个特殊的目标单元,它设置所有在启动后应处于活动状态的计时器单元(有关详细信息,请参阅 systemd.timer(5))。

建议应用程序安装的计时器单元通过Wants=该单元的依赖项被拉入。这最好通过WantedBy=timers.target计时器单元的“ [Install]”部分进行配置。

定时器Before=timers.target默认依赖于。而且,如果你检查man bootup,你会看到basic.target在拉timers.target作为一个依赖。所以我认为WantedBy=basic.target在大多数情况下似乎可以正常工作(对于default.target,通常是multi-user.targetgraphical.target,两者都在 之后basic.target)。但:

timers.targetbasic.target异步拉入。这允许计时器单元依赖于仅在启动后才可用的服务。

因此,依赖于其他服务单元的更复杂的计时器最好依赖于其他服务单元timers.target而不是任何其他服务单元。