3

私は奇妙な状況にあり、NTP時間調整の方向性が必要です。

NTPデーモンを実行するPC(Red Hat)があり、このPCはLAN上のStratum2タイムサーバーで時刻を調整します。

私のPCはシリアルポート(RS-232)を介してDVRにも接続されています。このデバイスと私のPCの時間は同期している必要があります。

しかし、しばらくすると、PCとDVRの時計がずれ始めます。そのため、PCで時間調整を検出し、DVRにも同じ調整を適用する方法が必要です。

これを行う方法はありますか?

Red Hatのシステムクロックの変更について、OSレベルで何らかのイベントをサブスクライブする方法を見つけたいと思っています。(これがRedHatで可能であれば)

WindowsではSystemEvents.TimeChangedイベントを使用できるようですが、C++を使用してRedHatで対応するものを見つけることができませんでした。

どんな助けでも大歓迎です。

4

2 に答える 2

8

adjtimeほとんどの場合、NTPサーバーはシステムクロックを個別に調整せず、ドリフトレートを制御できるようにするために、を使用してシステムクロックを遅くしたり速くしたりするだけです。NTPサーバーはこれをかなり継続的に実行している可能性があり、調整を行うたびに通知するわけではありません。

NTPサーバーが調整を行うたびに通知したとしても、その情報は役に立ちません。DVRのクロックはさまざまなハードウェアによって駆動されるため、ドリフトレートが異なり、さまざまな時間にさまざまな調整セットが必要になります。理想的には、これはDVRのNTPデーモンによって実行されます。

NTPデーモンは状況によってはクロックのジャンプを引き起こします。起動時または時計がずれた場合に発生する可能性がありますが、これは非常にまれなイベントです。これを行うと、おそらくログメッセージが出力されるため、1つの可能性はログを監視することです。別の可能性は、時々結果を比較することclock_gettime(CLOCK_REALTIME)ですclock_gettime(CLOCK_MONOTONIC)。これらの2つのクロック間のデルタが変更されたことに気付いた場合、それは誰かがシステム時間をジャンプさせたためであるに違いありません。ただし、注意してください。一方のクロックをフェッチした瞬間からもう一方のクロックをフェッチした瞬間まで、予測できない可変の時間が経過するため、結果は不安定になります。

clock_gettime(CLOCK_MONOTONIC)ニーズによっては、システム時間を無視し、DVRとの同期にのみ使用することで、必要なことを達成できる場合があります。その時計はジャンプしないことが保証されています。しかし、注意してください!(もう一度?!ははは!)CLOCK_MONOTONICNTPデーモンの指示の下で、まだ速度が遅くなったり速くなったりする可能性があると思います。

于 2012-01-06T11:37:33.777 に答える
0

MicrosoftからのAPIの変更を除いて、この問題の解決策は実際にはないように思われるため、機能リクエストを追加しました。これと同じ問題が発生している場合は、賛成票を投じてください。

于 2018-12-11T21:41:06.340 に答える