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

How to check ntpd is still running and synced

本文关键字:运行 同步 是否 ntpd 何检查 检查      更新时间:2023-10-16

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

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

我的问题是 ntp_gettime(( 可以用来确定 ntpd 是否正在运行并且服务器连接仍然有效,我只是在某处犯了错误吗? 如果没有,有没有办法做到这一点?

您的问题的答案是"否"。这不是 NTP 服务器的接口,不能用于确定 NTP 服务器的状态。这是完全不同的东西。根据 glibc 文档:

ntp_gettime和ntp_adjtime功能提供了一个接口 监控和操纵系统时钟以保持高精度 时间。例如,您可以微调时钟的速度或 将其与另一个时间源同步。

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

换句话说,这是NTP服务器本身用来与内核通信,以处理业务的内容。

检查守护程序操作

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

ntpctl -s all

我最终这样做的方法是使用管道进行 ntpstat 调用并处理输出。 也就是说,我检查未同步、已同步和是否未同步(在检查未同步后(,并根据上述结果采取相应的行动。

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