如何检查ntpd是否仍在运行并同步

问题描述 投票:0回答:3

我正在调用ntp_gettime(),它按预期执行,但是如果我杀死ntpd,我仍然会得到正确的行为,并且返回值没有问题。这表明ntp_gettime()不会调用ntpd,这是我认为正在发生的事情。

我正在尝试检查ntpd仍在正常运行,并且它仍然具有有效的连接。我现在假设ntpd根据定义的时间间隔更新系统,并且ntp_gettime()调用仅在调用系统。

我的问题是,可以使用ntp_gettime()确定ntpd是否正在运行,并且服务器连接仍然有效,我是否在某个地方犯了错误?如果没有,有办法吗?

c++ linux system-calls ntp ntpd
3个回答
0
投票

您的问题的答案为“否”。这不是NTP服务器的接口,不能用于确定NTP服务器的状态。这是完全不同的东西。 According to the glibc documentation

ntp_gettime和ntp_adjtime函数提供了监视和操纵系统时钟以保持高精度时间。例如,您可以微调时钟速度或与另一个时间源进行同步。

这些功能的典型用法是由服务器实现网络时间协议,用于同步多个系统的时钟和高精度时钟。

换句话说,这就是NTP服务器本身用来与内核进行通信以处理事务的方法。


0
投票

检查守护程序操作

ntpctl是一个程序,用于显示有关正在运行的ntpd守护程序的信息,以下命令将为您提供有关该守护程序与之同步的服务器数量,系统时钟(如果已同步/未同步)的状态以及时钟偏移的信息。有关更多信息,请参见ntpctl https://man.openbsd.org/ntpctl的联机帮助页。 Openntpd软件包为您带来了ntpctl程序。

ntpctl -s all

0
投票

我最终完成此操作的方法是使用管道进行ntpstat调用并处理输出。那就是我检查是否未同步,已同步以及是否不存在同步(检查不同步之后),并根据上述结果采取相应措施。

如果有更好的方法来获得相同的结果,因为我认为这很麻烦,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.