ntpdateなんて使ってるんじゃあるまいね

今朝起きて、メールチェックしようとしたらサーバに接続に失敗する。サーバのエラーログを確認したら以下の通り。

Time just moved backwards by 116 seconds. This might cause a lot of problems, so I’ll just kill myself now. http://wiki.dovecot.org/TimeMovedBackwards

(時間が116秒戻った。ヤバいからオレは死ぬぜ。dovecot)

dovecotが死に際に残してくれたURLにアクセスすると、

大変な事になるから時間を戻してはいけないよ。もしかしてntpdateなんて使ってるんじゃあるまいね。ntpd使えよな。

なんて書いてある。図星だ。

ウチのサーバはntpdを動かさず、cronで明け方にntpdateで時刻調整を行っている(ntpサーバにするつもりはないのでntpデーモンを動かす気がなかった)。

そして実は、昨日事情あって夕刻にサーバをリブートしていた。それで大幅な時刻誤差が生じて明け方のntpdateでdovecotが死亡ようだ。

「再起動後の大幅な時刻誤差」には心当たりがある。ハードウェアクロックだ。

以前のサーバではntpdateにあわせてhwclockでハードウェアクロックの調整も行っていたのだけど、今はそれを怠っていた。

http://www.linux.or.jp/JM/html/util-linux/man8/hwclock.8.html

# hwclock –show;date  
Wed Feb 13 07:19:07 2008  -0.692619 seconds  
Wed Feb 13 07:16:56 JST 2008

ハードウェアクロックの方が2分ほど進んでいる。つまりこれが116秒の時差。とりあえず、ハードウェアクロックをカーネルクロックに合わせておく。

# hwclock –systohc

次に、ntpdateで行っていた時刻調整をntpdで行うようにする。

以下のコンテンツを参考にさせて頂いたところ、-qオプションが便利なようだ。このオプションは時刻調整が済み次第ntpdを終了するというもの。つまりこれは、ntpdをデーモンとして動かさずに利用できる事になる。知らなかった。

http://www.asahi-net.or.jp/~AA4T-NNGK/ntpd.html

一応記載しておくと、ntpdateとntpdの実質的な違いは、前者は強制的に時刻調整するのに対し、後者は1秒の長さを実際よりも長くしたり短くしたりして正確な時刻に近づけていくという点。

cronの設定を変更し、-qオプションによりntpdで時刻調整の後、hwclockでカーネルクロックとハードウェアクロックの時刻を同期させるよう変更した。これでOK。