如何延迟 systemd 服务启动,直到网络和 ntp 时间同步完成?

如何延迟 systemd 服务启动,直到网络和 ntp 时间同步完成?

我的 Linux 家庭服务器上有一个问题,它无法正确导出其 NFS 共享,可能是因为当网络服务未完全同步时 NFS 服务启动得太早。
我的 Raspberry Pi 上也存在类似的问题,我启用了硬件看门狗并将其配置为监视一个文件,该文件在启动时更新,此后每 10 分钟更新一次。
唉,当我在长时间关闭(没有 RTC!)后启动 pi 时,看门狗在时间从网络更新之前就启动了。
因此,看门狗会触发重新启动,因为它发现受监视文件的时间差太大。
在这两种情况下,我认为有必要延迟各自服务的启动,直到网络完全启动并同步。
我已阅读以下提示https://stackoverflow.com/questions/43001223/how-to-ensure-that-there-is-a-delay-before-a-service-is-started-in-systemd,但是因为这两个服务都是标准的 systemd 服务,所以我不知道应该如何延迟它们。

答案1

我最终找到了这个https://blog.debiania.in.ua/posts/2020-11-27-howto-delay-a-systemd-service-until-the-clock-is-synchronized.html,这解决了我的问题。
这个问题2020年就已经出现了,但似乎仍然没有得到妥善解决。
我按照以下步骤操作,现在 nfs 导出工作正常,并且看门狗仅在系统时间更新后启动。

  1. dpkg -l | dpkg -l | grep -q "ii *chrony" && apt 删除 chrony
  2. systemctl 启用 --now systemd-timesyncd.service
  3. systemctl启用--now systemd-time-wait-sync.service
  4. systemctl 编辑 watchdog.service #添加以下几行
    [单位]
    之后=time-sync.target
    想要=time-sync.target
  5. systemctl 编辑 nfs-server.service #添加与 4 中相同的行。

答案2

我在 pi 上也有类似的问题。我修改了 ntp 启动脚本以首先运行 ntpdate,以便时钟以良好的时间开始。 (您的系统可能已经这样做了。) ntpdate 至少在完成之前将时间精确到一秒之内。

然后你可以告诉你的其他脚本依赖ntp和network-online。

就像是

[Unit]
After=network-online.target ntp.service

相关内容