![Systemd:如何让计时器在所需服务后运行?](https://linux22.com/image/178630/Systemd%EF%BC%9A%E5%A6%82%E4%BD%95%E8%AE%A9%E8%AE%A1%E6%97%B6%E5%99%A8%E5%9C%A8%E6%89%80%E9%9C%80%E6%9C%8D%E5%8A%A1%E5%90%8E%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
目前,我有这个系统计时器 ( my.timer
):
[Unit]
Description=My Timer
[Timer]
OnActiveSec=30
Unit=my-subsequent.service
[Install]
WantedBy=multi-user.target
由于以下原因,计时器被设置为在启动时激活:systemctl enable my.timer
和systemctl start my.timer
。
激活后,计时器会等待 30 秒,然后启动服务my-subsequent.service
。
然而,我希望它等待,而不是让计时器在启动时激活另一项服务( my-preceding.service
) 在启动时激活。
这样链条就是:启动> my-preceding.service
> my.timer
> my-subsequent.service
。
我怎样才能做到这一点?
编辑:
我试图寻找是否可以在计时器中使用After=
and Requires=
,但没有找到任何东西。然而乍一看这似乎确实有效。这是一个可以接受的解决方案吗?
[Unit]
Description=My Timer
After=my-preceding.service
Requires=my-preceding.service
[Timer]
OnActiveSec=30
Unit=my-subsequent.service
[Install]
WantedBy=multi-user.target
答案1
是的,使用After=
, 和Requires=
是订购服务的正确方法。您可能还需要注意,如果指定的服务Requires
失败,您的服务也会失败。从联机帮助页:
Often, it is a better choice to use Wants= instead of Requires= in order to
achieve a system that is more robust when dealing with failing services.