試験運用中なLinux備忘録

2007/08/10

ntpdateで時刻を自動的に合わせる

インターネット上において、正確な時刻を提供するサーバが存在し、そのサーバと時刻を同期させることで、手元のマシンの時刻を正確なものに合わせることができる。

時刻を同期させるのに使用されるプロトコルがNTP(Network Time Protocol)で、正確な時刻を提供するサーバはNTPサーバ、そのサーバと通信するntpdateコマンドなどがNTPクライアント。

NTPサーバの階層構造など、詳しいことはWikipediaなどを参照。

  1. ntpdateとntpd
  2. ntpdateのほうがよい?
  3. ntpdate+cronの実際
  4. ntpdateを起動時と休止からの復帰時に実行させる設定
    1. Gentoo Linuxの場合
    2. Debian,Ubuntuの場合
    3. hibernate-scriptの設定
  5. サーバの選択

ntpdateとntpd

ntpdateはサーバから時刻を取得後すぐにシステム時刻に反映する。これにより、時刻合わせ前の時計が大幅にずれていたりすると、大きく時刻が飛ぶことになる。

ntpdは、デーモンとして動作して、少しずつ時計のずれを修正していくのだが、あまりずれすぎている場合、諦めてしまう。*1別のNTPクライアントに時刻を提供することもできる。

ntpdatentpdは、ディストリのパッケージになっていることが多い。Gentoo Linuxでは両方とも「ntp」パッケージに含まれ、DebianやUbuntuでは「ntpdate」と「ntp」に分かれている。

GNOMEデスクトップ環境の「日付と時刻の設定」にある時刻同期機能は、ntpdデーモンが動作しているときにのみ使用可能。

ntpdateのほうがよい?

ntpdには、セキュリティホールが見つかることもあるため、それほど精度を気にするのでなければ、ntpdateを起動時に自動的に実行させるのみ(デスクトップ用途など)、もしくはcronを使用して定期的に実行させるだけでも十分と思われる。

ntpdate+cronの実際

1番目のフィールド(分)は、cron.hourlyなどとぶつからない値にする。

2番目のフィールド(時)に「*/n」と指定する(nは数字)と、「n時間ごと」になる。下の例では2時間ごとに実行されることになる。

サーバは複数指定可能で、スペース区切りで書いていく。

ファイル名: /etc/crontab

59 */2 * * * root nice -n 19 /usr/sbin/ntpdate -s -b -u [NTPサーバ...]

(2008/10/26)優先度を落とすように変更

なお、手元の環境では、動作テストは行ったものの、起動時のみの調整で十分な(少しずれても特に困らない)ため、この方法で運用はしていない。

ntpdateを起動時と休止からの復帰時に実行させる設定

起動時の設定は、ディストリ依存。

Gentoo Linuxの場合

NTPCLIENT_CMDはそのままで、サーバの部分を編集する。

ファイル名: /etc/conf.d/ntp-client

NTPCLIENT_CMD="ntpdate"
NTPCLIENT_OPTS="-s -b -u [NTPサーバ...]"

更に、ntp-clientを自動的に実行させるため

$ sudo rc-update add ntp-client default

を実行しておく。

Debian,Ubuntuの場合

/usr/sbin/ntpdate-debian*2というラッパースクリプトが起動時に/etc/network/if-up.d/ntpdateによって自動実行されるようになっている。その設定ファイルは以下。ntpdateのみ使用する場合、NTPDATE_USE_NTP_CONFはnoにしないと、下のサーバリスト(NTPSERVERS)が使用されない。

/etc/init.d/ntpdateは存在しない(sargeまではあったが、etch以降無くなったようで、最近のUbuntuにも無い)。

ファイル名: /etc/default/ntpdate

NTPDATE_USE_NTP_CONF=no
NTPSERVERS="[NTPサーバ...]"
NTPOPTIONS="-s -b -u"

hibernate-scriptの設定

復帰時にntpdateが実行されるようにする。

設定ファイルで「SaveClock restore-only」を指定すると、休止時に時計を保存しないため、休止処理が短縮される代わり、以降連続して休止/復帰を繰り返すと、復帰時のntpdateにより、/var/log/messagesに記録されるずれ(「ntpdate」の行にある「offset」の後ろの値)が大きくなっていくが、時刻は毎回復帰時に正確になっているため、問題はない。時計は、次に再起動かシャットダウンしたときに保存される。

ファイル名: /etc/hibernate/common.conf

# 休止時に時刻を保存せず、休止処理を短縮させる
SaveClock restore-only

# Gentoo Linuxの場合
RestartServices ntp-client
# Debian, Ubuntuの場合(未テスト)
OnResume 30 /usr/sbin/ntpdate-debian

サーバの選択

あたりを参考にする。

(2014/9/24)リンク切れのページを別のページに置き換え

また、精度の最も高いstratum 1サーバには、通常は接続しない。

[引用] http://wiki.nothing.sh/page/NTP より

Stratum-1 のNTPサーバには、個人のPCや、個々の組織のローカルサーバなどから、直接アクセスするべきではありません。 Stratum-1 サーバは原則として、プロバイダ等の代表的マシン (=公開NTPサーバ) がアクセスするものです。

アクセス集中はネットワークのジッタ増加を引き起こし、結果的に正確な時間の配信を困難にします。

福岡大に限らず、特定の一カ所へのアクセス集中は、過負荷の問題を引き起こし、管理者・利用者双方にとって好ましくありません。それぞれの利用すべき NTP サーバを正しく選択してください。

同ページにもあるように、

[引用] http://wiki.nothing.sh/page/NTP より

NTPサーバは、ネットワーク的に近いサーバを選択するのが大原則。 まずは自分の利用しているプロバイダがNTPサーバを提供してるか確認しましょう。

ひとまず「ntp.jst.mfeed.ad.jp」「ntp.nict.jp」「ntp.ring.gr.jp」のいずれかを選ぶのも手。

サーバを動かすわけでもなければ、「ntp.ring.gr.jp」を指定しておけば十分と思われる。ついでに、ringサーバのstratumについても引用。

[引用] http://ring.maffin.ad.jp/ring/ntp.html.ja より

[Q] ntp.ring.gr.jpのstratumの散らばり具合は?

[A] 現状、stratum2〜4の間です。ただし、常に全てのNTPサーバがラウンドロビンに入っているわけではありませんので、例えばstratum2とstratum3のサーバのみでラウンドロビンが構成されることもあります。

なお、stratum3のサーバがstratum2のサーバより高精度な場合もあることも申し添えておきます。

使用したバージョン:

  • ntp 4.2.4_p0
  • hibernate-script 1.96

*1ntpdの実行前にntpdateをするなど、工夫をする

*2:Ubuntuでもこの名前

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

(C) 2007-2015 kakurasan
本ウェブログの表示につきましては、横幅1,000ピクセル以上を推奨します。