我正在开发一个嵌入式 OpenSUSE 12.3 系统,该系统允许用户配置(单个)NTP 服务器地址。我需要能够向用户提供有关与指定服务器通信的情况的反馈。服务器地址有效吗? NTP 是否无法联系服务器?是在查询服务器吗?或者说,我们完全同步了吗? (注意:一旦 NTP 认为它已同步,那么我不在乎它的同步程度。)
现在我已经编写了一个 bash 脚本来解析
ntpq -np
的输出:
"ntpq: read: Connection refused"
则 ntpd 未运行"No association ID's returned"
那么服务器地址无效".INIT."
则 ntpd 尚未连接到服务器"*"
开头的行,那么我们正在查询服务器显然,这是一个麻烦,并且高度依赖于平台,我很想有一个更好的解决方案。
我知道内置的 ntp 源代码树中有一个 libntpq.a 可供外部应用程序使用,但在正式发布之前,这只是切换到新的平台依赖性。
是否有官方方法可以确定 NTP 客户端当前的通信状态?再次注意,只会配置一个服务器。
ntpstat 怎么样,这对你有用吗?以下是命令运行时的退出/返回值:
查看页面 验证我的 NTP 是否正常工作
另一个选项是使用 ntp-wait 命令。 ntp-wait 通常用在启动脚本中,在执行其他任务之前需要同步系统时间。如果将详细选项传递给 ntp-wait,如果同步失败,它将打印出状态和/或错误。您还可以告诉 ntp-wait 在返回错误之前等待同步多长时间。
与 ntpstat 不同,ntp-wait 由 ntp 参考实现提供,因此依赖它比期望安装/可用 ntpstat 更便携。
我发现最好的办法就是重新启动服务。在 Debian 上:
systemctl restart ntp
如果层数为16则表明连接有问题 查看详细解释了解ntpq命令输出。