ntpd

ntpd

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 -pnntpd サーバーがシステム クロックの同期を維持するジョブをどの程度適切に実行しているかを報告できます。これは、時間差をログに記録する別の方法です。

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これがすぐに実行できるかどうかは疑問です。

これら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 ntplibapt-get install python3-ntplib

python3 ntp_check.py

関連情報