
NTP 通信をサポートするアプリケーションを作成するというタスクがあります。これまでのところすべて正常に動作していますが、最後の NTP ポーリングが成功したかどうかを知る必要があります。
ネットワーク ケーブルを抜くと、翌朝になっても ntpstat ですべてが正常であると表示されます。しかし、一晩中 NTP 通信はありませんでした...
何かアイデアはありますか?
ありがとう!
Ping は良い解決策ではありません。bc 応答がサーバーによってオフになっているか、サーバーはアクセス可能だが ntp デーモンが実行されていない可能性があります。
答え1
自分で見つけました。
ntpq -pnには「reach」という列があり、ポーリングが成功しなかった場合は減少します。
答え2
ほとんどのアプリケーションは、すべての NTP パケットが到着したかどうかを気にしません。UDP over IP は時々損失することがあります。ntpd は継続し、最後に知られているオフセットとドリフトに基づいて調整を続けます。実際、ほとんどのアプリケーションは時間同期をまったく気にしません。気にする少数のアプリケーションは、起動時に ntpd (または chronyd) が起動するまで待機する場合があります。
到達しきい値を持つオープンソースの監視スクリプトの1つはntpmon参考までに、すべての NTP ソースの 75% が成功と見なされます。つまり、到達範囲が 8 ビットの数値である場合、最後の 8 つのパケットのうち 6 つが成功と見なされます。これにオフセットしきい値を加えると、インフラストラクチャ監視のホスト メトリックが作成されます。
ntpstatはおそらくシェルスクリプト ntpstat(以前のプログラムを置き換えます)。これは、ソースと推定エラーを出力します。また、NTP デーモンが実行されていないなどの特定の場合にのみ、ゼロ以外の戻りコードで終了します。ntpstat は到達時に警告しません。これは、切断されたユースケースをサポートするために意図的に行われたのか、その機能が実装されなかったのかはわかりません。