3

我的情况很奇怪,我需要一些调整 NTP 时间的方向。

我有一台运行 NTP 守护程序的 PC(Red Hat),这台 PC 使用我 LAN 上的 Stratum 2 时间服务器调整其时间。

我的 PC 还通过串行端口 (RS-232) 连接到 DVR。这个设备和我的电脑时间需要同步。

但是一段时间后,我的 PC 和 DVR 的时钟开始漂移,所以我需要一种方法来检测我的 PC 上的时间调整,并对 DVR 应用相同的调整。

有什么办法吗?

我希望找到一种在操作系统级别订阅某种事件以在 Red Hat 上更改系统时钟的方法。(如果这对 RedHat 来说是可能的)

在 Windows 上似乎可以使用SystemEvents.TimeChanged事件,但我在使用 C++ 的 RedHat 上找不到对应的。

任何帮助表示赞赏。

4

2 回答 2

8

大多数情况下,NTP 服务器不会对系统时钟进行离散调整,它只会使用 减慢或加快速度adjtime,以努力控制漂移率。NTP 服务器可能会相当连续地执行此操作,并且不会在每次进行调整时都告诉您。

即使 NTP 服务器在进行调整时告诉您,该信息对您也无用。DVR 的时钟由不同的硬件驱动,因此具有不同的漂移率,需要在不同的时间进行不同的调整。理想情况下,这将由 DVR 上的 NTP 守护程序完成!

NTP 守护进程在某些情况下会导致时钟跳变。它可能发生在启动时或时钟走时,但这应该是非常罕见的事件。它在执行此操作时可能会发出一条日志消息,因此一种可能性是查看日志。clock_gettime(CLOCK_REALTIME)另一种可能性是clock_gettime(CLOCK_MONOTONIC)不时比较结果。当您注意到这两个时钟之间的增量发生了变化时,一定是因为有人让系统时间发生了跳跃。但请注意:结果会很紧张,因为从您获取其中一个时钟到获取另一个时钟的那一刻,经过了不可预测且可变的时间。

根据您的需要,您可以通过忽略系统时间并仅clock_gettime(CLOCK_MONOTONIC)用于与 DVR 同步来实现所需的功能。那个时钟保证不会跳。但要小心!(又一次?!哈哈!)我相信CLOCK_MONOTONIC在 NTP 守护进程的指导下仍然可以减速和加速。

于 2012-01-06T11:37:33.777 回答
0

由于除了 Microsoft 的 API 更改之外似乎没有真正解决此问题的方法,因此我添加了一个功能请求。如果您遇到同样的问题,请投票。

于 2018-12-11T21:41:06.340 回答