在定时器单元启动之前触发另一个系统单元启动?

Kar*_*nth 2 linux time systemd

我有一个 RPi3。由于它没有硬件时钟,我有一个服务可以tlsdate与本地服务器同步时间。(这是在每次启动时触发。由于频繁断电而定期触发)。

我还有一个计时器mysync.timer启动mysync.service的同步操作我的日历。这会使用OAuth,如果时间不匹配,则会出错。

有没有办法启动tlsdate.servicebefore mysync.service,每次mysync.service运行?

我查看了 systemd 文档并找到了Before=and After=,但我不确定如何将它与计时器一起使用。

Bob*_*Bob 5

您需要做的就是添加一个Afterand Wantsin mysync.service

After=tlsdate.service
Wants=tlsdate.service
Run Code Online (Sandbox Code Playgroud)

这将导致tlsdate.service启动之前mysync.service。如果您想确保之前tlsdate完成mysync,您可能需要确保tlsdateType=oneshot,而不是默认的Type=simple

两者的区别是After指定了两者同时启动的顺序,而Wants导致tlsdate启动时mysync启动。因此,您需要同时指定顺序和依赖项。


如果你想要一个硬依赖,即如果不能启动mysync应该失败tlsdate,那么你应该使用Requires

After=tlsdate.service
Requires=tlsdate.service
Run Code Online (Sandbox Code Playgroud)

您应该能够完全忽略计时器。定时器将启动mysync.service,但你真正想要的是在依赖mysync.servicetlsdate.service第一次启动时,不管它无论是通过定时器或不会被触发。