我正在调用ntp_gettime(),它按预期执行,但是如果我杀死ntpd,我仍然会得到正确的行为,并且返回值没有问题。这表明ntp_gettime()不会调用ntpd,这是我认为正在发生的事情。
我正在尝试检查ntpd仍在正常运行,并且它仍然具有有效的连接。我现在假设ntpd根据定义的时间间隔更新系统,并且ntp_gettime()调用仅在调用系统。
我的问题是,可以使用ntp_gettime()确定ntpd是否正在运行,并且服务器连接仍然有效,我是否在某个地方犯了错误?如果没有,有办法吗?
您的问题的答案为“否”。这不是NTP服务器的接口,不能用于确定NTP服务器的状态。这是完全不同的东西。 According to the glibc documentation:
ntp_gettime和ntp_adjtime函数提供了监视和操纵系统时钟以保持高精度时间。例如,您可以微调时钟速度或与另一个时间源进行同步。
这些功能的典型用法是由服务器实现网络时间协议,用于同步多个系统的时钟和高精度时钟。
换句话说,这就是NTP服务器本身用来与内核进行通信以处理事务的方法。
ntpctl是一个程序,用于显示有关正在运行的ntpd守护程序的信息,以下命令将为您提供有关该守护程序与之同步的服务器数量,系统时钟(如果已同步/未同步)的状态以及时钟偏移的信息。有关更多信息,请参见ntpctl https://man.openbsd.org/ntpctl的联机帮助页。 Openntpd软件包为您带来了ntpctl程序。
ntpctl -s all
我最终完成此操作的方法是使用管道进行ntpstat调用并处理输出。那就是我检查是否未同步,已同步以及是否不存在同步(检查不同步之后),并根据上述结果采取相应措施。
如果有更好的方法来获得相同的结果,因为我认为这很麻烦,请告诉我。