time - 获取有关 ntp 调整的通知

标签 time ntp

我的情况很奇怪,我需要一些指导来调整 NTP 时间。

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

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

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

有什么办法吗?

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

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

感谢任何帮助。

最佳答案

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

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

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

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

关于time - 获取有关 ntp 调整的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7497242/

相关文章:

javascript - 如何从 HH :MM time in two inputs in Javascript-Jquery? 求和小时和分钟

sql - 将十进制转换为时间 SSRS/SQL

c - 如何编写NTP客户端?

php - 是否有可能在长时间运行的 PHP 进程中捕获/处理/检测系统时间何时更改?

android - 如何同步两部或多部安卓手机的系统时钟?

c++ - 在 C++ 中测量 std::system 的实际执行时间

mysql - 仅在日期和时间上进行 Timzone 转换 - 是否有必要?

go - 执行 time.Sleep() 函数时 goroutine 的状态是什么

linux - 设置 NTP 服务器以允许本地机器为 Linux 同步

ntp - NTP 尝试同步的 'frequency difference' 是什么?