パーソナルツール
現在の場所: ホーム サーバ設定 NTP 再起動で時間ずれる場合の対処方法

再起動で時間ずれる場合の対処方法

NTPで時刻を同期をしているのにもかかわらず、サーバを再起動すると時間ずれてしまう場合の対処方法。

サーバを再起動すると時間がずれる

サーバの再起動を行うとntpで時刻同期を取っていたはずなのに、時刻がずれるということはありませんか? それは、ハードウェアで設定されている時間がずれているために起きているという原因が考えられます。

他の原因だったらごめんなさい:-p

時刻ずれ対策(linux編)

Linuxはサーバ起動時にハードウェアに設定してある時刻を参照してこれをシステムの時間として起動していきます このことによって、サーバを再起動すると時刻がずれるという現象が発生するのです。

システムとハードウェアの時間確認方法

hwclockはハードウェアの時刻を、date でシステムの時刻を表示させてます。

# hwclock ; date
2007年04月02日 13時50分38秒 -0.742973 秒
2007年 4月 2日 月曜日 15:34:10 JST

私の環境では、結構ずれていました・・・

システムとハードウェアの時刻同期

早速このズレを修正したいと思います。
システムとハードウェアクロックの同期には「 hwclock -w 」か「 hwclock --systohc 」 コマンドを使用します。
※今回の例ではhwcock -wを使用しています。

# hwclock -w ; hwclock ; date
2007年04月02日 15時34分52秒 -0.198647 秒
2007年 4月 2日 月曜日 15:34:52 JST

こんな感じで、ハードウェアの時間とシステムの時間を同期させます。

crontabへの登録

手動でハードウェアとシステム時刻の同期をとっても、ハードウェアの時間は放置しておくと徐々にずれていってしまうので、 crontabコマンドで、定期的にシステムとの時刻を同期するようにしたほうがよいと思います。

# crontab -e
追加内容

毎朝AM5時にhwclockが実行されるという内容です。

0 5 * * * /sbin/hwclock -w

内容確認
# crontab -l
0 5 * * * /sbin/hwclock -w

これで、毎日AM5時にhwclockコマンドが実行されてシステムとハードウェア時刻の同期がとれるようになります。

時刻ずれ対策(FreeBSD編)

上記でLinux環境でhwclockを使ってシステムとハードウェアの時刻同期方法を記述していますが、FreeBSDには、hwclockコマンドがありません。 では、どうするかというとFreeBSDでは、ntpdateコマンドを使用することでハードウェアの時間を同期させることができます。

システムとハードウェアの時刻同期

では、早速ntpdateコマンドで127.0.0.1(ローカルホスト)を指定して、システムとハードウェアクロックを同期させます。

※ntpデーモンが既に動いている環境では、ntpdateに「-u」オプションをつけて実行しなければ ntpdateを実行することが出来ませんので、注意してください。

# ntpdate -u 127.0.0.1
3 Apr 13:14:38 ntpdate[4259]: step time server 127.0.0.1 offset 5344392.799331 sec

-uオプション無しで失敗の例

# ntpdate 127.0.0.1
3 Apr 13:15:01 ntpdate[4261]: the NTP socket is in use, exiting
crontabへの登録

FreeBSDでもLinuxと同様にcrontabコマンドで、定期的にシステムとの時刻を同期するようにしたほうがよいと思います。

# crontab -e
追加内容

毎朝AM5時にntpdateが実行されるという内容です。

0 5 * * * /usr/sbin/ntpdate -u 127.0.0.1

内容確認
# crontab -l
0 5 * * * /usr/sbin/ntpdate -u 127.0.0.1

これで、毎日AM5時にntpdateコマンドが実行されてシステムとハードウェア時刻の同期がとれるようになります。