在成功的时间同步时自动运行脚本 - 如何?

在成功的时间同步时自动运行脚本 - 如何?

我使用带有 Stretch(基于 debian)的 rapberry Pi 3 和 timesyncd 作为 NTP 客户端。

Pi 定期开关,并通过 USB 调制解调器连接到互联网,然后同步时间。系统日志剪切:

Oct  3 12:36:02 raspberrypi pppd[2756]: primary   DNS address 10.74.32.5
Oct  3 12:36:02 raspberrypi pppd[2756]: secondary DNS address 10.74.32.6
Oct  3 12:36:02 raspberrypi dnsmasq[607]: reading /run/dnsmasq/resolv.conf
Oct  3 12:36:02 raspberrypi dnsmasq[607]: using nameserver 8.8.8.8#53
Oct  3 12:36:02 raspberrypi dnsmasq[607]: using nameserver 10.74.32.5#53
Oct  3 12:36:02 raspberrypi dnsmasq[607]: using nameserver 10.74.32.6#53
Oct  3 12:36:02 raspberrypi dnsmasq[607]: using nameserver 8.8.8.8#53
Oct  3 12:36:02 raspberrypi PPP: Modem connected
Oct  3 12:36:02 raspberrypi kernel: [  617.235549] nf_conntrack version 0.5.0 (15360 buckets, 61440 max)
Oct  3 12:36:06 raspberrypi autossh[2877]: starting ssh (count 1)
Oct  3 12:36:06 raspberrypi autossh[2877]: ssh child pid is 2878
Oct  4 02:47:23 raspberrypi systemd[2434]: Time has been changed
Oct  4 02:47:23 raspberrypi systemd-timesyncd[274]: Synchronized to time server 91.236.251.24:123 (3.debian.pool.ntp.org).
Oct  4 02:47:23 raspberrypi systemd[1]: Time has been changed

我需要运行一些脚本自动地仅在系统时间同步成功后。即在线

Oct 4 02:47:23 raspberrypi systemd-timesyncd[274]: Synchronized to time server 91.236.251.24:123 (3.debian.pool.ntp.org).

上面的日志。

有人可以建议吗?如果 timesyncd 不是一个选项,也许您可​​以建议另一个允许事件脚本编写的 ntp 客户端?或者其他一些方法?

谢谢!

答案1

查看 -daemon 是否ntpd正在运行并手动更新脚本中的时间,如果成功则运行其余部分:

!#/bin/bash

service ntp stop && ntpq -gq && service ntp start && continue

当然,这需要root更新的权限。

参考

答案2

有一个提议的 API 可以通知时钟更改,但尚未实现。查看 timesyncd来源,似乎当时钟改变时,这2个文件

/run/systemd/timesync/synchronized
/var/lib/systemd/timesync/clock

被“感动”,即它们的最后修改时间被更新。如果您创建这些目录之一(/run在每次重新启动时重新创建),您可以尝试使用inotifywait在文件更改时获取事件,然后运行您的程序。

相关内容