在各种示例中,我看到了所有建议的不同选择:
- WantedBy=timers.target
- WantedBy=多用户.target
- WantedBy=basic.target
- WantedBy=default.target
- WantedBy=mytimer.target(自定义用户定义名称)
然而,在我找到的例子中,没有提供进一步的解释。
以下页面也没有对 WantedBy 提供任何解释:
- https://www.freedesktop.org/software/systemd/man/systemd.timer.html
- https://www.freedesktop.org/software/systemd/man/systemd.time.html
我想了解一种简单的方法,当需要编写 systemd 计时器而不是 cron 作业时,我可以使用它。
*设置 cron 作业仅需 1 行。 Systemd 计时器涉及写入两个文件并运行一两个 systemctl 命令。但根据我的经验,这一事实并不一定是 systemd 计时器比 cron 更难的原因——它有多种选择,而且(似乎)缺乏清晰的文档和简单的示例来充分解释。
答案1
对于简单的用例,请使用WantedBy=timers.target
.看man systemd.special
:
timers.target
设置所有计时器单元的特殊目标单元(请参阅 systemd.定时器(5)有关详细信息),该选项应在启动后处于活动状态。
建议应用程序安装的计时器单元通过
Wants=
该单元的依赖项拉入。最好通过WantedBy=timers.target
定时器单元的“[Install]
”部分进行配置。
默认情况下,计时器具有 的依赖性Before=timers.target
。而且,如果你检查man bootup
,您会看到它作为依赖项basic.target
引入。timers.target
所以我认为WantedBy=basic.target
在大多数情况下似乎都可以正常工作(对于default.target
,通常是multi-user.target
或graphical.target
,两者都在 后面basic.target
)。但:
timers.target
被异步拉入basic.target
。这允许定时器单元依赖于仅在启动后才可用的服务。
因此,依赖于其他服务单元的更复杂的计时器会timers.target
比依赖于任何其他服务单元更好。