6

我需要创建一个应用程序来验证每台机器上的 NTP 时间同步。换句话说,我需要确定我的局域网中的每台机器是否同步到一个公共时间服务器(stratum)。所以,到目前为止,我想出了两种方法。

1) 让每台机器上的 NTP 客户端生成统计文件。如果我采用这种方法,我应该检查哪个统计文件以确定机器上的时间是否在时间服务器的某个容差范围内?有peerstats、clockstats和loopstats。这些文件中是否包含我可以用来确定时间是否同步的信息?

2) 调用 ntpq 命令行参数并通过管道输出。解析输出。

现在我更喜欢选项 1,但是,正如我所指出的,我不确定是否有任何 NTP 统计文件包含我可以用来确定时间是否同步的信息。

有没有更好的方法。

是否有可以用来直接查询 NTP 客户端的 API?

谢谢你的帮助。

4

5 回答 5

6

您可以运行ntpq -c "rv 0 stratum,offset"命令并解析输出。如果返回stratum<16,那么offset将是 ntp 池和您的系统时钟之间的时间差(以毫秒为单位)。

还有一个libntpq图书馆正在开发中。它处于早期测试阶段,但如果您非常需要某些东西,它应该可以使用。

2016 年 10 月 7 日更新:看起来libntpq项目已经失效很长时间了,但源代码中包含了一个同名的库ntp。它看起来很有用,但很可能需要静态链接。人们应该能够容忍 GPL 以便以这种方式使用它。

于 2013-03-07T01:04:41.167 回答
1

验证同步的最佳方法是实际验证它,而不是查看由您正在检查其工作的守护程序生成的文件。您应该运行ntpdate -q或等效并验证报告的偏移量是否在您需要的任何公差范围内。

于 2012-04-05T20:32:37.847 回答
1

我也有同样的问题。我一直在使用两个命令的组合:ntptime [然后解析输出以确认没有出现“错误”一词] ntpq -p [然后确认它返回非错误状态,以及至少一个“ +" 符号表示同步状态]

这在我的 CentOS 机器上很好用,但在我的 FreeBSD 服务器上,即使有几个小时不同步,它也会返回“OK”状态,只要本地时间稳定,ntpd 正在运行,并且时间源服务器正在返回一致的时间。我欢迎更好的答案。使用 ntpdate 的建议可能会奏效,如果我可以安装一些东西以使 ntpdate 使用 ntp.conf 获取时间源服务器列表。

于 2012-05-01T19:33:48.427 回答
0

我认为两者都会输出良好的结果,唯一的区别是如果你真的想每隔几分钟监控一次时间然后选择第二个选项......ntpq有各种选项来监控你的整个Ntp同步过程......ntpq>pe会给你您所有配置的对等点的状态,ntpq>as 将提供有关每个对等点的所有其他详细信息,ntpq>rv 将提供有关每个对等点的完整概要...还有其他内部命令可通过 ntpq 调试您的 ntp 进程。如果您需要更多说明,则值得浏览以下页面:http: //doc.ntp.org/4.1.1/ntpq.htm

对于您的第一个选项,它是一个统计报告,您可以将其保留在您的 ntp 上,以便按照 ntp.conf 文件中的说明继续生成和更新,即您是否希望它每天或每周生成等等...

Loopstats 将向您显示日期、时间、频率和时间偏移、抖动、时钟规则时间常数等。Peerstats 将通知您所有存在的对等点,并且配置的 clockstats 将通知时钟驱动程序状态

除此之外,还有 rawstats 和 sysstats 选项可用,您还可以检查您的系统日志并通过 ntp.conf 文件将它们重定向到您自己的 Ntp 日志

您可以浏览上述链接中的监控部分,并可以了解有关如何配置 ntpstats 的更多详细信息

希望这可能对您有所帮助!

于 2013-03-07T10:23:56.223 回答
0

如果您只需要确定机器是否同步,您可以使用ntpstat.

SYNOPSIS
   ntpstat

DESCRIPTION
   ntpstat will report the synchronisation state of the NTP daemon 
   running on the local machine.  If the local system is found to be 
   synchronised to a reference time source, ntpstat will report the 
   approximate time accuracy.

RETURNS
   ntpstat returns 0 if clock is synchronised.  
   ntpstat returns 1 if clock is not synchronised.  
   ntpstat returns 2 if clock state is indeterminant, 
   for example if ntpd is not contactable.
于 2015-01-25T12:17:36.443 回答