Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何确定NTP通信状态_Linux_Bash_Client_Embedded Linux_Ntp - Fatal编程技术网

Linux 如何确定NTP通信状态

Linux 如何确定NTP通信状态,linux,bash,client,embedded-linux,ntp,Linux,Bash,Client,Embedded Linux,Ntp,我正在开发一个嵌入式OpenSUSE 12.3系统,它允许用户配置(单个)NTP服务器地址。我需要能够向用户提供有关如何与指定服务器通信的反馈。服务器地址有效吗?NTP是否无法联系服务器?是查询服务器吗?或者,我们是完全同步的吗?(注意:一旦NTP认为它是同步的,那么我不在乎它的同步程度。) 现在我已经编写了一个bash脚本来解析ntpq-np的输出: 如果输出包含“ntpq:读取:连接被拒绝”,则ntpd未运行 如果输出包含“未返回关联ID”,则服务器地址无效 如果输出包含“.INIT.”,

我正在开发一个嵌入式OpenSUSE 12.3系统,它允许用户配置(单个)NTP服务器地址。我需要能够向用户提供有关如何与指定服务器通信的反馈。服务器地址有效吗?NTP是否无法联系服务器?是查询服务器吗?或者,我们是完全同步的吗?(注意:一旦NTP认为它是同步的,那么我不在乎它的同步程度。)

现在我已经编写了一个bash脚本来解析
ntpq-np的输出:

  • 如果输出包含“ntpq:读取:连接被拒绝”
,则ntpd未运行
  • 如果输出包含“未返回关联ID”,则服务器地址无效
  • 如果输出包含
    “.INIT.”
    ,则ntpd尚未连接到服务器
  • 如果输出不包含以
    “*”
    开头的行,则我们将查询服务器
  • 否则我们是同步的
  • 显然,这是一个后方的痛苦,高度依赖于平台,我希望有一个更好的解决方案

    我知道有一个libntpq。一个内置的ntp源代码树的内部,可以被外部应用程序使用,但在正式发布之前,这只是转换到一种新的平台依赖性


    是否有官方方法确定NTP客户端的当前通信状态?请再次注意,将只配置一台服务器。

    ntpstat如何,对您有效吗?以下是命令运行时的退出/返回值:

    • 退出状态0-时钟已同步
    • 退出状态1-时钟不同步
    • 退出状态2-如果时钟状态不确定,例如如果ntpd不可接触

    查看页面

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


    与ntpstat不同,ntp wait由ntp参考实现提供,因此依赖它比期望安装/可用ntpstat更具可移植性

    这可能是一个更全面/更集中的工具的基础,但目前它只是一个起点。也很难找到。不过,没有其他答案。。。您可能会认为这不是一个模糊的需求…我只是在我的系统上尝试了ntp等待,当“ntpq-np”清楚地显示它已与ntp服务器同步时,它会报告“ntp未同步”。我查看了ntp wait的源代码(它是Perl),它只是在解析
    ntpq-c“rv 0 state”
    的输出,但它做得不好(例如,该ntpq命令的当前输出是
    ***服务器未知的请求变量,但ntp wait的代码正在检查
    请求变量未知
    )。所以,我不知道这是怎么回事。