在计时器单元启动之前触发另一个 systemd 单元启动?

在计时器单元启动之前触发另一个 systemd 单元启动?

我有一台 RPi3。由于它没有硬件时钟,所以我有一个服务可以tlsdate与本地服务器同步时间。(每次启动时都会触发该服务。由于经​​常断电,所以会定期触发)。

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

每次运行之前,有什么办法可以启动tlsdate.service吗?mysync.servicemysync.service

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

答案1

您需要做的就是在中添加一个Afterand :Wantsmysync.service

After=tlsdate.service
Wants=tlsdate.service

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

两者的区别在于,After如果两者同时启动,则指定顺序,而当启动时则Wants导致tlsdate启动mysync。因此,您需要两者,以指定顺序和依赖关系。


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

After=tlsdate.service
Requires=tlsdate.service

您应该能够完全忽略计时器。计时器将启动,但您真正想要的是首先启动的mysync.service依赖项,无论它是否通过计时器触发。mysync.servicetlsdate.service

相关内容