如何判断NTP通讯状态

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

我正在开发一个嵌入式 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 客户端当前的通信状态?再次注意,只会配置一个服务器。

linux bash client embedded-linux ntp
4个回答
4
投票

ntpstat 怎么样,这对你有用吗?以下是命令运行时的退出/返回值:

  • 退出状态 0 - 时钟已同步。
  • 退出状态 1 - 时钟未同步。
  • 退出状态 2 - 如果时钟状态不确定,例如,如果 ntpd 不可联系

查看页面 验证我的 NTP 是否正常工作


2
投票

另一个选项是使用 ntp-wait 命令。 ntp-wait 通常用在启动脚本中,在执行其他任务之前需要同步系统时间。如果将详细选项传递给 ntp-wait,如果同步失败,它将打印出状态和/或错误。您还可以告诉 ntp-wait 在返回错误之前等待同步多长时间。

与 ntpstat 不同,ntp-wait 由 ntp 参考实现提供,因此依赖它比期望安装/可用 ntpstat 更便携。


0
投票

我发现最好的办法就是重新启动服务。在 Debian 上:

systemctl restart ntp

0
投票

如果层数为16则表明连接有问题 查看详细解释了解ntpq命令输出

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