我的任务是编写一个支持 NTP 通信的应用程序。到目前为止一切正常,但我需要知道上次 ntp 轮询是否成功。
当我拔掉网线时,ntpstat 甚至在第二天早上告诉我一切正常。但是整个晚上都没有 NTP 通信......
你有什么想法吗?
谢谢你!
Ping 不是一个好的解决方案,因为服务器可能关闭了响应,或者服务器可访问,但 ntp 守护进程没有运行。
答案1
我自己找到的。
ntpq -pn 有一个“reach”列,如果轮询不成功,该列会减少
答案2
大多数应用程序并不关心每个 NTP 数据包是否到达。UDP over IP 有时会丢失数据,这种情况确实会发生。ntpd 会继续运行并根据上次已知的偏移和漂移不断进行调整。实际上,大多数应用程序根本不关心时间同步。少数关心时间同步的应用程序可能会在启动时等待 ntpd(或 chronyd)启动。
一个达到阈值的开源监控脚本是监控。作为参考,它认为所有 ntp 源的 75% 都是成功的。因此,最后 8 个数据包中的 6 个,给定的到达率是一个 8 位数字。这加上偏移阈值构成了基础设施监控的主机指标。
ntpstat 可能指的是shell 脚本 ntpstat(替换早期程序)。它将打印出源和估计错误。并且仅在特定情况下以非零返回代码退出,例如 NTP 守护程序未运行。ntpstat 不会在到达时发出警报,是否有意支持断开连接的用例,或者该功能从未实现,我不知道。