Systemd

Systemd:如何在所需服務後執行計時器?

  • August 14, 2020

目前,我有這個systemd計時器(my.timer):

[Unit]
Description=My Timer

[Timer]
OnActiveSec=30 
Unit=my-subsequent.service

[Install]
WantedBy=multi-user.target

由於:systemctl enable my.timersystemctl start my.timer,計時器設置為在啟動時啟動:

啟動後,計時器等待 30 秒,然後啟動服務my-subsequent.service

**但是,**我希望它在啟動時等待另一個服務my-preceding.service)啟動,而不是在啟動時啟動計時器。

所以鏈條是:boot > my-preceding.service> my.timer> my-subsequent.service

我怎樣才能做到這一點?


編輯:

我試圖找出是否可以在計時器中使用After=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

是的,使用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.

引用自:https://unix.stackexchange.com/questions/604504