禁用systemd计时器单元的正确方法是哪种?


18

我已经成功地将一些cron作业迁移到了systemd。我遵循了一些指南,并采用了创建3个文件的标准方法:

myjob.timer - systemd timer unit
myjob.service - systemd service unit
myjob.sh

您可能会猜到,在某个时间触发了myjob.timer,它运行myjob.service,而myjob.service依次执行myjob.sh。

我为所有计时器都设置了相同的设置,现在我看到一切正常,我想禁用myjob.timer,它只是一个测试器。

我只是做:

systemctl --user disable myjob.timer

还是我还必须做:

systemctl --user disable myjob.service

正确的做法是什么?我是systemd的新手,所以我想学习如何以正确的方式做事。我猜测禁用两个设备是正确的,以使系统免于多余的行李。

Answers:


18

如果不myjob.service包含任何[Install]块,则仅禁用定时器就足够了。计时器是启动.service文件的唯一方法,因此.timer禁用此选项后,启动.service文件的操作将不会发生。

还记得跑步systemctl --user stop myjob.timer禁用计时器会阻止它在下次启动时启动,但不会停止当前正在运行的计时器。


每个计时器单元中都有一个[Install]块。它只有一个条目,说“ WantedBy = default.target”。我从遵循的指南中得到了这一点。我可以完全摆脱[Install]块吗?
bitofagoob

1
好。我已经阅读了[Install]部分,并且我认为WantedBy = default.target可以确保在任何正常的引导会话(多用户或图形用户)中启用该单元(启用后)。我将接受Mark Stosberg的建议,仅禁用计时器单元。我还将把他的回答标记为解决方案。干杯马克!
bitofagoob

2
您需要定时器单元上的[Install]部分,以便它们在启动时启动。通常WantedBy=timers.target[Install]如果您希望服务在引导时启动,则只需要一个服务部分,这听起来像在这种情况下并不需要。
Mark Stosberg '17

1
谢谢。我已经从服务单元中删除了[安装]部分,并将计时器中的[安装]部分更改为WantedBy = timers.target。
bitofagoob
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.