Получить уведомление о настройках NTP - PullRequest
2 голосов
/ 21 сентября 2011

Я нахожусь в странной ситуации, и мне нужно какое-то направление с настройками времени NTP.

У меня есть компьютер (Red Hat), на котором запущен демон NTP, и этот компьютер корректирует свое время с помощью сервера времени Stratum 2 в моей локальной сети.

Мой компьютер также подключен к DVR через последовательный порт (RS-232). Это устройство и мой компьютер время необходимо синхронизировать.

Однако через некоторое время часы моего ПК и цифрового видеорегистратора начинают смещаться, поэтому мне нужен способ определения настройки времени на моем компьютере и такой же настройки для цифрового видеорегистратора.

Есть ли способ сделать это?

Я надеюсь найти способ подписаться на какое-то событие на уровне ОС для изменения системных часов в Red Hat. (Если это вообще возможно для RedHat)

Кажется, это возможно в Windows с событием SystemEvents.TimeChanged , но я не смог найти аналога в RedHat с использованием C ++.

Любая помощь приветствуется.

Ответы [ 2 ]

7 голосов
/ 06 января 2012

В большинстве случаев NTP-сервер не выполняет дискретную настройку системных часов, он только замедляет или ускоряет его с помощью adjtime, пытаясь контролировать скорость дрейфа. Сервер NTP может делать это довольно непрерывно, и он не будет сообщать вам каждый раз, когда вносит корректировку.

Даже если NTP-сервер сообщает вам, когда он вносит коррективы, эта информация для вас бесполезна. Часы вашего цифрового видеорегистратора управляются другим оборудованием и, следовательно, имеют разную частоту дрейфа и требуют различного набора настроек в разное время. В идеале это должно быть сделано демоном NTP на DVR!

Демон NTP работает при некоторых обстоятельствах, вызывающих скачок часов. Это может произойти при запуске или если часы уходят, но это должно быть очень редким явлением. При этом он, вероятно, выдает сообщение журнала, поэтому одной из возможностей будет просмотр журналов. Другой возможностью было бы время от времени сравнивать результаты clock_gettime(CLOCK_REALTIME) и clock_gettime(CLOCK_MONOTONIC). Когда вы замечаете, что дельта между этими двумя часами изменилась, это должно быть потому, что кто-то сделал скачок системного времени. Но будьте осторожны: результаты будут нестабильными, потому что непредсказуемый и переменный промежуток времени истекает с момента, когда вы получаете один из часов, до момента, когда вы получаете другой.

В зависимости от ваших потребностей, вы можете достичь того, что вам нужно, игнорируя системное время и используя только clock_gettime(CLOCK_MONOTONIC) для синхронизации с DVR. Эти часы гарантированно не прыгнут. Но будьте осторожны! (опять ?! Хаха!) Я верю, что CLOCK_MONOTONIC может все еще замедляться и ускоряться под руководством демона NTP.

0 голосов
/ 12 декабря 2018

Поскольку, похоже, решения этой проблемы не существует, за исключением изменения API от Microsoft, я добавил запрос функции .Пожалуйста, проголосуйте, если у вас возникла такая же проблема.

...