我使用带有 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
在文件更改时获取事件,然后运行您的程序。