先に進む前に、ホストコンピュータでNTP時間を同期させる必要があるCアプリケーションを開発しています。デフォルトでは、コマンドを実行するラッパーC関数を作成しました。ntpq -p
出力に*文字が含まれている場合は、接続されて続行する準備ができているとします。成功したNTP同期の出力例:
remote refid st t when poll reach delay offset jitter
==============================================================================
*myserver.domain.com xxx.xxx.xxx.xxx 2 u 729 1024 377 1.120 -1.834 2.282
出力される場合確かに*文字が含まれている場合、私のプログラムはしばらくスリープ状態になってから再確認します。 *文字が見つかるまでこのプロセスを繰り返します。
しかし、私のコンピュータの1つで、*文字が再起動後に最終的に表示されるのに長い時間がかかることがわかりました(〜5分)。しかし、より速く同期しているようです。つまり、を実行すると、datetime
NTPサーバーから取得する必要がある正確な時間のように見えますが、*文字は数分後に表示されます。
これはデフォルトでシステムが再起動してから5分間実行されないため、私のアプリケーションに悪影響を及ぼします。
私はntp.confファイルで "iburst"オプションを使用していますが、すぐに同期されることを願っています。
# my NTP server config
server myserver.domain.com iburst
今回も同期が速いようですが、ntp -q
出力で*文字を報告するのに時間がかかります。
この問題を解決する方法についてのアイデアはありますか?また - NTP同期が完了したことを確認するためのより良いコマンドはありますか?
編集#1:より多くの情報を追加
私はChris Daviesの答えを通して、ntpdが同期されたと見なされる前に8回の成功したポーリングが必要であることを理解しています。これは私の時計が同期していないにもかかわらず正しく見える理由を説明します。わからないのは、iburstオプションを設定しても起動時にポーリングが遅すぎる理由です。
私はrefid = .STEPを見つけました。初期起動時。これは、初期同期が非常に大きいことを意味するので、これが関連しているかどうかはわかりません。
編集#2:完全なシーケンスは次のとおりです。
ホストの起動 - 初期のNTP同期が発生したようで、変更が非常に大きかったため、refid = .STEPです。
しばらくして、refidは私のNTPサーバーのIPアドレスを更新しました。ただし、8回連続して成功しなかったため、まだ非同期状態と見なされます。 64秒ごとにポーリングするだけで同期時間が長くなります。注:IBURSTを有効にしました!
NTPデーモンサービスを再起動すると、すぐにバックアップされ同期されます。今iburstが正常に動作しているようです。
再起動後にNTPデーモンが起動した場合、iburstオプションが失敗したのとほぼ同じです。しかし、サービスを再起動すると正常に動作します。
ベストアンサー1
システムはinitramfsを使用していますか?それでは、修正後に更新されましたかntp.conf
?そうでない場合、システムはntpd
initramfsに保存されている以前のバージョンを使用して起動プロセスの早い段階で起動できます。これは、起動時にこのオプションが無視されるように見える理由を説明できます。ntp.conf
iburst
再起動時にntpd
最新バージョンが使用されるため、ntp.conf
このiburst
オプションが適用されます。
初期同期によって常に非常に大きな変更が発生した場合(refid = .STEP.
言うように)、ディストリビューションntpdate
から起動する前に起動時に実行できることを確認してくださいntpd
。アイデアは、ntpdate
大きなステップが処理された後、ntpd
すでに正確な時間に非常に近いシステムクロックから始めて、理想的にiburst
ステップを変更することなく成功できることです。