<Homeへもどる>   <前に戻る>

タイムサーバーを利用して時計合わせ

ntpdateで時計合わせ

 パソコンの時計とは実にあてにならない。気づくと十数分進んでいたり遅れていたりする場合がある。こまめにチェックすることで防げるが、このチェックが意外に面倒だ。
そこで、cron というスケジュール管理をするデーモンを利用して、1回/日、調整してしまおう。

----------------------------------------------------------------
# crontab
0 3 * * * ntpdate XXX.XXX.XXX.XXX
----------------------------------------------------------------

<書式>
[分] [時] [日] [月] [曜日] [ユーザー] [コマンド]  となる。
XXX.XXX.XXX.XXX にはタイムサーバーのIPアドレス。
上記の設定では、毎日3時(AM)にタイムサーバーにアクセスして時間を合わせる。

 さて、パソコンを複数台持っている人もいるだろう。
また、Linuxでサーバーをたて、そこを中心にネットワークを構築している人も増えてきていると思う。
ここで、それらのパソコン全てを正確な時間に合わせようとした場合、いちいち外部のタイムサーバーにアクセスしていたのでは効率が悪い。ADSLや光回線が増えてきたとて、トラフィックは増やさないに越したことはない。
 そこで、Linuxマシンをタイムサーバーにしてしまおう。
この目的に最適なサーバーで有名なのは「xntpd」だ。ソースはこちら(Time Server)から。
ただ、現在のところ、どのディストリビューションにもxntpdはインストールされているらしく、敢えてここでインストール手順を明記する必要もないと思うので、省略。

 まずは外部のNTPサーバーを決めなければならない。
これには正確さが要求され、狂っているとLinuxマシンのみならず、そこにぶら下がるクライアントの時間までが全て狂う。ということで、「世界の一次公開タイムサーバー一覧」から日本で唯一の一次NTPサーバーを選んだ。

 問い合わせ先サーバーが決まったら、xntpdの設定にはいるわけだが、実はとても簡単。
/etc/ntp.conf を編集するだけ。(なければ次のように作成する)

----------------------------------------------------------------
server clock.nc.fukuoka-u.ac.jp
driftfile /etc/ntp.drift
----------------------------------------------------------------

 編集が終わったら、いよいよ(ってほどでもない)xntpdを立ち上げる。

/usr/local/bin/xntpd

 これでLinuxマシンは一次NTPサーバーに問い合わせ、常に正確なと期を刻むことができる。
しかし、上手くxntpdが立ち上がらない場合もあるようだ。その原因には「NTPサーバーとクライアントの時間が大幅にずれている」場合が考えられ、その時はxntpdは起動すらできないようになっているらしい。
そんなときは、以下のようにして一旦時間を合わせてやると良い。

# ntpdate clock.nc.fukuoka-u.ac.jp
# clock -w

 「clock -w」ではハードウェア(CMOS)にntpdateで取得した正確な時間を書き込んでいる。この後にxntpdを立ち上げれば、きっとうまくいくはずだ。
 動作の確認をしてみよう

# ntpq -p
remote        refid   st t when  poll  reach  delay  offset  disp
====================================================================================
*clock.nc.fukuok  .GPS.   1 u  604  1024  377  79.21  -1.578  14.98

 といった感じに表示されるはずだ。
左からそれぞれ、「NTPサーバー」「参照ID」「サーバーの階層」「サーバーのタイプ」「最後のパケットを受け取ってからの時間」「ポーリング時間」「到達可能なレジスタ」「遅延時間」「階層のオフセット」「階層の分散」となる。
要は「offset」の項目でどれだけずれているかが確認できれば、とりあえずは問題ない。(単位はミリ秒)
 で、xntpdの場合、一発で正確な時間に調整できるわけではなく、しばらく経ってから安定する。だいたいその間10分くらいだろうか。すると、サーバー名の頭に「*」がくっつく。

 これでLinuxサーバーは常に正しい時間を示すようになった。(日常の問題ない範囲で)

 続いてクライアントマシンであるWindowsの設定だ。
私の場合は「桜時計」を使っている。使用方法も簡単で、ダウンロードしてインストールし、タイムサーバーにLinuxサーバーのアドレスを入力すればOK。「桜時計」を常駐させて常に正しい時刻にしておくも良し、時々立ち上げて誤差を修正するも良し。あとは自分の好きなように使っていけばいい。

 ついでに、ルーターもいじってみる。
YAMAHAのRTA50iは、「ntpdate」というコマンドをそのまま持っているルーターだ。
そのため、「ntpdate LinuxサーバーのIPアドレス」とでもしてやれば、ルーターまでもが正確な時を刻める。
ということで早速実行。おまけにスケージュリング。

# schedule at 08:00 * ntpdate 192.168.***.***

として、毎朝8時にLinuxサーバーに問い合わせて時刻合わせをするようにした。

<Homeへもどる>   <前に戻る>