
ntpd
共通デーモンを使用して、仮想マシンが実際に時間を記録するかどうかをテストしたいのですが、調整する時計。
macOS システムの VirtualBox 内で Solaris 11.4 (Oracle の Intel 向け標準イメージ) を実行していますが、時刻を正しく同期できません。VM がすでに VirtualBox Guest Additions を使用してこの処理を行っている可能性があり (これがどのように機能するかはわかりません)、ntpd
ゲストで実行することで時刻管理が乱れる可能性があることに気づきました。
ntpd
これをテストするために、 Solaris VMで設定してモニターいくつかのパブリック タイム サーバーを所有していますが、何らかの方法でローカル クロックを変更しないようにしています。こうすることで、ログの経時的な変化を調べて、ローカル クロックが実際に正確な時刻を保っているかどうかを確認できloopstats
ますpeerstats
。
ntpd
問題は、ローカル クロックの調整を停止する方法についてのヒントが見つからないことです。
私は過去にも、openntpd
実際の時間管理に使用しているシステム (OpenBSD から) でこれを実行したいと考えていました。ntpd
デーモンはバックグラウンドで待機して、干渉することなく監視するだけで済みます。しかし、当時もこれを実現する方法を見つけることができませんでした。
答え1
ntpd
あなたがしなければならないntpd を使用する場合、私の知る限りのオプションは次のとおりです。
ntpを無効にする
掲載されているものマニュアルntp.conf
ページntpを無効にする可能性があるフィードバックループ、または平易な言葉で言えば、タイム サーバーとローカル クロック間の時間補正を計算する機能を削除します。ntp.conf
このオプションを有効にするには、次の行が必要です。
disable ntp
注意: このオプションを使用すると、ntpd が時間参照を要求する他のシステムに提供する時間が間違っているか、ずれている可能性があります。deny
外部システムからの時間のずれを監視する場合を除き、他のシステムからのすべての時間クエリを拒否するには、 の行を使用するのが妥当と思われます (外部システムの IP に対しては deny を使用し、allow を使用します)。
注記:システム クロックが実際に ntpd によって「自由に実行」されるかどうかは、私には完全にはわかりません。ただし、これは文書化されたオプションなので、ntpd が文書化された内容に準拠しない場合は、バグです。
ミンサネ
minsane minsane
これは、クラスタリングアルゴリズムで1つ以上の真のキマーを生成するためにクロック選択アルゴリズムで使用できる候補の最小数です。この数より少ない場合は、時計は規律がなく、自由に動いている。
これは、次のような行 ( in ntp.conf
) を設定することによって行われます。
tos minsane 100
または、他の大きな数値(使用可能または使用されているサーバーよりも大きい数値)。
注: クロックの値がゆっくりとシフトするのを避けるためにカーネル ドリフト値が 0 にリセットされるかどうかはわかりません。disable kernel
カーネル ディシプリン機能を無効にするために、さらに設定するのが妥当かもしれません。
関連している
ntpd -qn
ntpd
サーバーが実行中の場合、ntpq -pn
ntpd サーバーがシステム クロックの同期を維持するジョブをどの程度適切に実行しているかを報告できます。これは、時間差をログに記録する別の方法です。
ntpdate -q
このパッケージntpdate
(非推奨としてタグ付けされています) は、次のようにして時間差を確認するために使用できます。
ntpdate -q 'pool.ntp.org' # marked as deprecated.
ntpdate -qu 'pool.ntp.org'
コマンドを実行するためにルート権限が必要ないように使用します( -u
「権限のないネットワーク ポートを使用する」という意味ですが、実行可能ファイルはユーザーがアクセスできる必要があります)。
sntp
クエリを実行する簡単なプログラムがあります (-s または -S オプションが使用されていない場合は変更されません)。
sntp pool.ntp.org
日付
このプログラムはrdate
リモート時間 (およびローカル時間) を表示できます。
rdate -np pool.ntp.org; date
は、次-n
のことを意味します。(デフォルトの)RFC 868タイムプロトコルの代わりにSNTP(RFC 2030)を使用します。印刷実際に変更を加えずに結果を表示します。
しかし、このプログラムは秒単位(小数点以下ではない)の解像度に制限されています。そして、Solarisにはオプションがありません
クロニー
ntp の代替パッケージ (chrony) は、システム クロックを設定せずに時間差のテストを実行できます。
chronyd -Q 'pool pool.ntp.org iburst'
これらはすべて、インターネット NTP 時間とシステム時間の差を (変更せずに) 検出する方法であると思います。
答え2
ntpd
これがすぐに実行できるかどうかは疑問です。
- その心臓部には
ntpd
「第3の」時計はありません。(最初の2つはシステムクロックとモノトニッククロック)。 - 機能的には
ntpd
、現在の時刻だけでなく、システムクロックの実行速度を制御するパラメータも調整します暗黙的に、これらの調整の効果を監視するように記述されています。
これら2つを合わせると、ntpdがこれらのパラメータの値をリアルタイムで調整せずに適切に維持できるモードを持っている可能性は非常に低いです。1つのクロック。ここで使用できる唯一のクロックはシステム クロックです。
あなたの質問では、実際に が必要かどうかは明らかではありませんntpd
。どの [S]NTP クライアントでも問題ありません。
少しのコードに慣れているなら、システムクロックを再調整せずにサーバーをポーリングする何かをまとめることができるかもしれません。
例えば、Python用のNTPライブラリがあります。ntplib60 秒のポーリングでオフセットを出力するスクリプトは次のようになります。
import ntplib
import sys
import time
def main(*args):
ntp_client = ntplib.NTPClient()
while True:
for server in args:
try:
response = ntp_client.request(server, version=3)
print(response.offset)
time.sleep(60)
except ntplib.NTPException:
print("query failed: {}".format(server))
if __name__ == "__main__":
if len(sys.argv) == 1:
# Do not use this server for commertial software without permission
main('pool.ntp.org')
else:
main(sys.argv[1:])
これをファイル に入れます。または ディストリビューション固有の ( )ntp_check.py
で ntplib がインストールされていることを確認してください。 次に、次のように呼び出します。pip install ntplib
apt-get install python3-ntplib
python3 ntp_check.py