Ubuntuの時計が遅くなったり速くなったりするのはなぜですか?


16

Ubuntuの時計は約30分ずれています:

Ubuntu Time&Date v。公式の米国時間

どこでこれのトラブルシューティングを開始できますか?

「インターネットから自動的に」設定されていると言われています。「インターネット」が現在の時刻を知っていることを確認するにはどうすればよいですか?

詳細

Ubuntuはインターネットと通信するのに十分な時間を費やしました:

$ date; uptime
Fri May 18 05:56:00 PDT 2012
 05:56:00 up 12 days, 10:48,  2 users,  load average: 0.61, 0.96, 1.15

Web検索で見つけたこのタイムサーバーは、正しい時間を知っているようです。

$ date; ntpdate -q north-america.pool.ntp.org
Fri May 18 05:56:09 PDT 2012
server 208.38.65.37, stratum 2, offset 1752.625337, delay 0.10558
server 46.166.138.172, stratum 2, offset 1752.648597, delay 0.10629
server 205.189.158.228, stratum 3, offset 1752.672466, delay 0.11829
18 May 05:56:18 ntpdate[29752]: step time server 208.38.65.37 offset 1752.625337 sec

NTPに関連する報告されたエラーはありません。

$ grep -ic ntp /var/log/syslog
0

再起動後、時刻は自動的に修正され、以下が表示され/var/log/syslogます:

May 18 17:58:12 aux ntpdate[1891]: step time server 91.189.94.4 offset 1838.497277 sec

ntpdateによって報告されたオフセットのログは、時計が1時間ごとに約9秒ずれていることを示しています。

$ while true; do ntpdate-debian -q | tail -n 1 >> 'drift.log'; sleep 16m; done
^C
$ r -e '
    attach(read.table("drift.log", header=FALSE))
    clock <- as.POSIXct(paste(V1, V2, V3), format="%d %b %H:%M:%S")
    fit <- lm(V10~clock)
    png("drift.png")
    plot(clock, V10, xlab="Clock time", ylab="Time server offset (s)")
    abline(fit)
    mtext(sprintf("Drift rate: %.2f s/hr", fit$coefficients[[2]]*3600))
'

クロック時間対タイムサーバーオフセット


背景:ntp正確な時間維持するための優れたツールです。ただし、誤った時刻から現在の時刻に到達するには、有限の時間(数分、または数時間)かかります。これは、ntp-servers(選択したもの)とこれらへのインターネット遅延に関連しています。@Floydは、正しい時間をすばやく強制するためのショートカットを概説しました。しかし、より良い時間(およびntpの使用)には、ntpサーバーの慎重な選択が必要です。
david6

私の車はこれをしています...私を狂わせます...私は毎週20分時間をロールバックしなければなりません
...-TheXed

私がやってしようと最初にすることは....マザーボードのバッテリーを変更している
TheXed

回答:


17

ntpは、コンピューターを適切な時間に設定し、逆方向に実行することなく実行します。これは、実行している一部のプログラムにとっては悪いことです。

時刻を設定するだけでなく、コンピューターが時刻を保持する方法を継続的に調整して、時刻が一瞬だけでなく、リアルタイムに近づくようにします(数十ミリ秒ではなく、数十ミリ秒以内) 。位相(時間)とレート(クロックが「ティック」する速度)の両方を調整します。ntpはクロックを逆方向に動かしません。再起動後にクロックを刻む速度を確立するのに長い時間がかかる場合があるため、ntpは/var/lib/ntp/ntp.driftというファイルのドリフトを追跡します。ntpを実行していないので、これは起こりません。

ntpは、ラップトップとデスクトップ、および仮想マシンがスリープ状態になることがあるため、以前ほど人気が​​ありません。常に実行されているコンピューター上で、また時間の連続する現実の世界で、たまに独自のスケジュールで実行されるように設計されています。それがおそらく現代のワークステーションにデフォルトでインストールされない理由です。[Vmwareについては、こちらをご覧ください]

代わりに、ネットワークインターフェイスが起動されるとntpdateが実行されます。スリープ状態のラップトップが起動すると、ネットワーク接続が再確立され、ntpdateが実行され、時刻が再び正確になります。マシンのハードウェアクロックが非常に正確で、ネットワークが頻繁に起動および停止される場合、ほとんどの人にとってこれで十分です。

何らかの理由で、ストックntpdateは常に実行されません。この場合は、代わりにntpdate-debianを使用してください。for.merの構文はntpdate ntp.ubuntu.comのようなもので、後者の場合はntpdate-debianです

これらのいずれかが存在しない場合、ntpは時間を維持するためのより良い方法です。

システムは、頻繁にタイマー割り込みを受け取り、割り込みごとの時間の考え方を更新するように設計されています。ハードウェアタイマーが仕様どおりに実行されている限り。時間はあまりドリフトしません。ハードウェアタイマーがそうでない場合、時間はさらにドリフトします(このようなすべての時計は、腕時計またはバッテリー制御の時計が移動するのと同じ理由で、一部が移動します。壁に差し込まれた時計は、あなたの電力会社)。

ほとんどのコンピュータータイマーは、その集積回路上の水晶制御発振器回路によって制御されます。結晶にもかかわらず、それらは環境、主に温度に応じてより速く、より遅く動作します。時刻同期ソフトウェアがインストールされていない限り、私たちは知りませんが、システムのクロックが仕様から外れていると思います。

ntpを1、2日実行すると、/ var / lib / ntp / ntp.driftに情報が保存され、割り込みごとにオペレーティングシステムの時間を進める速度を調整する必要があるかどうかが示されます。ハードウェアのクロックレートをインターネット経由で取得するリアルタイムと一致させます。ファイルを同じ状態に保ち、その後1分後にntpを開始および停止するだけです(/var/lib/ntp/ntp.driftファイルを変更しないと仮定すると)。ntpは終了します。この詳細はわかりません。

ntpが/var/lib/ntp/ntp.driftに保存する値は、私のものとはかなり異なると思います

ただし、このマシンが常に稼働している場合、最善の方法は、ntpをインストールて、それを実行させることです。時間を開始する直前に取得する方法の詳細については、他の回答を参照してください。デスクトップでntpを実行し、ラップトップでntpdateを実行します

nealmcbによる興味深い回答として、adjtimexがこの回答に記載されています。

システムが常に稼働し続けていない場合は、ブート時にntpdateを実行するのが適切なオプションのようです。

コンピューターの時間が逆行すると、一部のソフトウェアがフリークする可能性があるという警告。起動後にntpdate 実行すると、これが発生する可能性があります。

1つの落とし穴、それは問題になる可能性があります:私が思い出すように、ntpは時間があまりにも遠くないことを期待しています。もしそうなら、保守的に行動しようとすると、ntpは時間をまったく調整しません。この状況にある場合は、両方を実行するのが理にかなっています。起動時にntpdateを実行して時刻を適切な時刻に初期化し、ntpを実行して実行を継続すると、正確な計時が提供されます。特に、マザーボードのバッテリーが不良であると、このエラーが発生する可能性があります。また、長時間オフになっているコンピューターを起動することもできます。


ジョンの素晴らしい説明!ほんの1つ-ほとんどのマザーボードの日付/時刻は、独自の32.768 KHz水晶を使用する別のRTC(リアルタイムクロック)によって維持されます(その周波数を2 ^ 15で除算すると正確に1秒になるため)、およびFSB通常100+ MHzにあるクロックは、日付と時刻の保持とは関係ありません-オーバークロック/アンダークロックが混乱する場合は、代わりにRTCモジュール/回路のクリスタルドリフトになります。この問題を調べてコメントに返信したり、回答を編集してこれを反映したりできますか?
ISH

両方やります!私が言ったように、それはありそうもないと思うので、私はオーバークロックの言及を削除しました。ただし、RTCはブート時の時刻を設定するためにのみ使用されます。あなたのコメントが言及しているように、それは1秒まで正確です。man rtcページは言う:「のRTCは、ソフトウェアクロックはカーネルによって維持され、gettimeofdayの(2)を実装するために使用されるシステムクロックと混同すべきではない...」システムクロックがFSBクロックに関連しているかどうかわかりません。カーネルの設定を見ると、最新のUbuntuの正確なi386カーネルのシステムクロックは250Hzに更新されています。コメントありがとう!
ジョンSグルーバー

@izx私のラップトップシステムでは、カーネルはHPETをクロックソースとして使用しています。設定可能です。ウィキペディアによると、これはサウスブリッジ機能の一部です。FSBとの関係について何と言っているのかわかりませんが、FSBはノースブリッジの一部であると私は考えています。
ジョンSグルーバー

ジョンと@izxに感謝します。私はこれの包括性に満足しています。izx、私が代わりに承認済みとしてマークしたことを個人的に受け取らないことを願っています。将来の訪問者にとってより良い読み物になると思います。
エンドリューク

@ændrük:まったく問題ありません。ご覧のとおり、ジョンの徹底性も高く評価しています。
イッシュ

12

-通常、時刻は、起動またはスリープ解除から起動するたびに1回だけ同期されます

そのため、問題は、Ubuntuのデフォルトのタイムサーバー(それは何ですか?)の時刻が間違っているか、Ubuntuがインターネットから自動的に時刻を設定していないかのいずれかです。

いいえ、Ubuntuのタイムサーバーは正確であり、それから自動的に時間を設定しています。

問題は、通常、各起動時に1回のみ発生することです(より正確には、ネットワークインターフェイスが起動するたびに -シャットダウン、スリープ、または休止状態から)。稼働時間に基づいて、1週間以上同期しなかったと言っても安全です。また、何らかの理由でシステムクロックがわずかに高速で動作しています。

- cron頻繁に再起動しない場合、またはサーバー/デスクトップがスリープ状態にならない場合は、1時間ごとに同期するジョブを設定します

あなたの最善の策は、cronジョブを設定することです。もしあなたが超正確な時間を望むなら、私は毎時言うでしょう。それを行う最も簡単な方法は次のとおりです。

  • sudo editor /etc/cron.hourly/ntpsync

次の行を追加します。

#!/ bin / bash

ntpdate ntp.ubuntu.com#またはサーバーの選択
  • 保存して終了して sudo chmod +x /etc/cron.hourly/ntpsync

/etc/cron.daily必要に応じて、1日に1回、これを代わりに入れることができます。


スポットオン。なぜ時計が間違っているのという質問に正しく答えるためにこれを受け入れていますが、その回避策には懐疑的です。実行するアクションを決定する前に、これについてもう少し学ぶ必要があります。
アーンドリューク

ntp.confファイルで選択したサーバーを設定した場合、ここで再定義する必要がありますか?
スネクセ

6

これは、ntp timeデーモンをインストールしていて、マシンの時間があまりにも離れているためにすばやく修正できない場合に発生する可能性があります。

それを修正するには、ターミナルを開いて

  sudo service ntp stop
  sudo ntpdate swisstime.ethz.ch
  date
  sudo service ntp start

これは何をしますか:

  1. ntpデーモンを停止します
  2. 時計を設定
  3. 時間は今正しいはずです
  4. ntpデーモンを再起動します

ntpがインストールされていない場合は、

  sudo apt-get install update

更新:ここで推奨されているように、cronジョブでntpdateを使用すると、微妙な問題が発生します。

ntpdateは、1時間ごとに時刻を「ジャンプ」させます。ntpを使用すると、クロックをスキューすることで時間を調整するため、この問題を回避できます。また、近隣のntpサーバーを選択すると、さらに高い精度が得られますが、必ずしも必要ではありません。デフォルトのntp構成ファイルには複数のサーバーが含まれており、サーバーは遅延を自動的に補正します。

結論:-ntpを使用します-遠くにいる場合は、ntpをシャットダウンし、ntpdateを1回実行して、ntpを再起動します。


/etc/init.d/ntp存在しません。これはかなり最近のUbuntu 12.04のインストールであり、時間に関連するものは意図的に変更していません。
アーンドリューク

その後、インストールすることをお勧めします。
フロイド

可能な限り、システム全体の構成とサービスに干渉しないことを好みます。このファイルがデフォルトでインストールされていない場合、デフォルトの時刻と日付の設定が機能する必要があるのはなぜですか?
アーンドリューク

1
再起動後の時刻は正しいですか?時計の更新はntpdateを1回だけ実行すると思われます。一部のシステムには、Linuxによって維持されるシステムクロックが非常に高速に実行されるという問題があります。特に、仮想マシンとして実行されているシステムでそれがありました。
フロイド

1
再起動またはシャットダウン後にこの問題が続く場合は、MOBOでCMOSセルが機能しなくなっている可能性があります。
アテンツ

1

私は同様の問題を抱えていましたが、それはファイアウォールの何かが原因でした。最後に、1時間ごとのcronジョブを追加しましたが、-u引数を追加しましたntpdate標準ポートを使用しないようにするため。

私の問題は、Ubuntuが実際に動作するかどうかを確認せず、動作ntpdateすることを自動的に想定していることが原因です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.