web-dev-qa-db-ja.com

ntpdate修正はアトミックですか?

昨日(7月30日)から/ var/log/syslogに次のものがあります

Dec 16 22:54:05 omap ntpdate[432]: step time server 91.189.94.4 offset 12052648.821465 sec

ntpdate 91.189.94。47月30日から12月16日まで時計を「修正」しました。 http://www.pool.ntp.org/scores/91.189.94.4 によると、そのサーバーは2ミリ秒以上オフではありませんでした。

これで、システムの起動時にdateコマンドを呼び出して、時計を約1秒の精度で設定するスクリプトができました。粗い時間はローカルネットワークから読み取られ、dateが呼び出されて時間が設定されます。システムにはリアルタイムクロックがなく、インターネット接続がNTPで利用できない可能性があるため、これらの線に沿って何かを行う必要があります。

利用可能な時計がないときにLinuxが最初の時刻をどのように推測するかはわかりませんが、それが非常に間違っている可能性があることを確認しました(これは合理的です)。何が起こったのかについての私の唯一の考えは:

  1. システムが起動し、時計を何か別の方法で初期化しました。たとえば、3月15日です。
  2. ntpdateはNTPサーバーとの通信を開始し、3月15日が実際の日付とどの程度間違っているかを判断しました
  3. 私のスクリプトはシステムの時計を7月30日に設定しました
  4. ntpdateは、時計が12052648秒遅いと判断し、時計が3月15日のままであると想定して、修正を追加しました。
  5. 12052648sは実際に7月30日に追加され、時計は12月16日になりました。

率直に言って、私はNTPがどのように機能するかについてあまりよく知りません。上記は合理的ですか?別の説明がありますか?

5
Peter Woo

あなたのセットアップについてもっと知らなくても、あなたの理論はもっともらしく聞こえます。

起動スクリプトを変更して、システム日付を設定するdateコマンドがntpdateの開始前に完了するようにする必要があります。

4
Michael Hampton

時計がどのように状態になったかはわかりませんが、可能であればdateコマンドを呼び出すスクリプトを削除することをお勧めしますか?

私が使用したほとんどのシステムで起動時にシステムクロックを設定する通常の方法は次のとおりです。

  1. ネットワークを起動します。
  2. ntpd-gで開始して、時計を同期します。

-gは、ntpdが時計をany時間にステップできるようにする新しいオプションです-ntpdのバージョンがそのfkagをサポートしていない場合は、=を開始する前にntpdate -b some.time.serverを実行します。 NTPデーモン

システムが非常に古く、これとはまったく異なることをしている場合は、おそらく非常に古くてサポートされていないので、起動スクリプトをより正気に変更することに何の不安もありません...

6
voretaq7

なぜntpdを使用しないのですか?

ntpdは、システムへのあらゆる種類のショックを回避するために更新を小さな変更にバッファリングするため、ntpdateよりもクロックが正しいことを確認するのにはるかに効率的です。

そしてそれ間違いなくあなたの時計を別の月に変更しません偶然

システムにntpdをインストールして有効にする方法について、より正確な手順を説明しますが、ディストリビューションを指定していません。

3
Soviero