ntp, ntpd(Linuxでの時計の合わせ方) 
ntpdを使うと、時計を自動的に調整してくれるようになります。 ntpdは基準となるサーバ(最大3つ)を見ながら時計を調整します。まず、ntpdをインストールして(例 apt-get install ntpd)、 /etc/ntp.conf を設定します。最初に、基準となるサーバを3つ探します。 現在、国により「ntp.nict.jp」が運営されており、もっとも精度の良い参照先の一つです。 しかし、ネットワーク上の遅延のため、より近いサーバに同期させた方が、時間のばらつきが小さくなることがあります。 (具体的には、ntpqコマンドで表示される「jitter」値が小さいほど、よいサーバです。)
近いntpサーバを探すデータベースを作りました。
通常、ここに表示されているサーバを上から順に試してみてください。
また、プロバイダや会社によっては、ntpサーバを別途用意していることが多いです。説明書を見たり、管理者に問い合わせたりしてみても良いかもしれません。もし、
独自のサーバを発見したら、是非、近いntpサーバを探すデータベースに登録してください!
サーバは、pc_common/
参照先のサーバが決まったら、適当なエディタ(emacsなど)で、「/etc/ntp.conf」を開きます。(たぶん、管理者アカウント(root)でないと編集できません。以下の作業はすべてrootで行います。)
中程に「server」という文字が見えると思いますので、そこらへんに
server ''ntp.nict.jp''
と1行で書き加えます。太字部分は、先のページで探してきたntpサーバの名前を使います。基本的に /etc/ntp.conf のどこに書いてもかまいません。以下のように、複数のサーバを設定できます。
# --- OUR TIMESERVERS ----- server ntp.nict.jp server ntp0.ring.gr.jp server ntp1.ring.gr.jp server ntp2.ring.gr.jp
ntpdは複数のサーバを指定できるので、近いntpサーバを探すデータベースで近そうなサーバを探して 、上から順にいくつか同じように追加してください。「ntp.nict.jp」は、おそらくつけておいて損はないでしょう。 この変更がよくわからなければ、先の検索ページに表示されるサンプルを使うと良いかもしれません。 ファイルにserverを追加したら、
# /etc/init.d/ntpd restart
コマンドを実行します。これで、ntpdが指定したサーバを認識して動き始めます。 しばらく待ってから「ntpq -p」コマンドで様子を見てみましょう。(「command not found」になる人は、rootになるとき「su -」を使ってないのだと思います。「su -」をするか、「/usr/sbin/ntpq」を指定して実行してください。) もし、
ring.aist.go.jp .INIT. 16 u - 64 0 0.000 0.000 4000.00
と、INIT が解消されなければ、先ほどの近いntpサーバを探すデータベースで 、サーバのIPアドレスを調べます。そこで表示されたアドレスを「/etc/ntp.conf」に追加します。
restrict 133.243.3.209 mask 255.255.255.255 nomodify notrap noquery
基本はここまでです。1日ほど待つと、ntpdはかなりの精度で時間を合わせていると思います。「ntpstat」コマンドで、精度を確認できます。
# ntpstat synchronised to NTP server (133.41.4.1) at stratum 2 time correct to within 42 ms polling server every 1024 s
この例では、42ミリ秒(42/1000秒)の精度で時間が合っていることがわかります。 より詳細な状態が「ntpq -p」コマンドでチェックできます。 重要なのはjitterの値で、pollが1024になった頃にjitterが10以下ならばおおむね問題ないはずです。下記の例では、欲張って7つもサーバを設定しています。7つは多すぎますが、2〜3つぐらいは指定しても良いでしょう。
# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== ns.hiroshima-u. ntp.hiroshima-u 2 u 471 1024 377 0.737 -0.135 0.272 -ntp.hiroshima-u .GPS. 1 u 425 1024 377 3.123 -0.924 0.430 -ntp-b2.nict.go. .PPS. 1 u 594 1024 377 28.749 -0.683 0.004 +ring.yamanashi. 133.23.247.47 2 u 605 1024 377 39.715 -0.617 0.058 ring.yokohama.r 0.0.0.0 16 u - 1024 0 0.000 0.000 4000.00 +ring.sakura.ad. 113.170.74.161 2 u 471 1024 377 41.706 -0.570 0.177 *ntp01.sinet.ad. .GPS. 1 u 351 1024 377 31.013 -0.513 0.013
これの詳細は後で述べますが、<b>この出力は、先ほどの近いntpサーバを探すデータベースに還元することで、このデータベースを更に良いものにできます。 リンク先ページの下の方にフィードバック用フォームがあるので、ご協力をお願いします。
ntpd は、サーバ用に設計されているので、時間をさかのぼる調整は行いません。時間を早めるときは、1秒の長さを短くして合わせます。 ntpq が調整する時間の伸び(縮み)は、±0.05% です。大きな時間のズレを修正するには、大きな時間がかかります。 これは、これ以上時計がずれるものはハードウエアの交換の必要があるという設計思想からくる制限と思われます。 VMWare などの仮想環境では、これより大きな時間の差が出ることがあります。その場合は、cron などで ntpdate を実行した方が良いでしょう。
/etc/cron.d/rdate 
*/1 * * * * root if [ `/usr/sbin/ntpq -p|awk '{if( $5 ~ /^[0-9]+$/ ) total += $9; num++ } END{ if(0<num) { print int(total/num) }else{ print 999999 } }'` -gt 10000 ]; then /etc/init.d/ntpd stop; ntpdate -b ntp.hiroshima-u.ac.jp; hwclock -w; /etc/init.d/ntpd start; fi
> /tmp/rdate.log 2>&1「ntpd; -p」 の説明 
先頭に「+」「-」「*」などがついたら、安定動作にはいっています。1日程度置いて、再びこれをチェックしてみてください。ここでjitterの大きなサーバは、時刻の揺れが大きいと言うことなので、もし4つ以上のサーバを参照していて、jitterが大きなサーバが含まれていたら、そのサーバははずした方が良いです。
| remote | サーバ名(先頭の記号は下記参照) |
|---|---|
| refid | サーバの時刻参照元。.GPS. などのソースが表示されることも。このサーバが使えなければ、refidをさかのぼると良いかも。初期化中は .INIT. や .STEP. になるので、しばらく待ってみる。 |
| st | サーバの階層(stratum)番号が表示されます。1なら1次サーバ。1次サーバはアクセスが集中しがちなので、近場の2次(以上)のサーバを探してください。 |
| t | 階層の種類。使えていれば気にしなくて良い。( l: local, u: unicast, m: multicast, b:broadcast ) |
| when | 最終動機からの経過時間(秒)。 |
| poll | 同期間隔(秒)。安定してくると徐々に長くなり、最大1024秒。 |
| reach | 過去8回分のチェックの成功の是非を8進数で表示。 |
| delay | 信号の平均遅延時間(ms)。 |
| offset | サーバとの時刻のずれ(ms)。10(1/100秒)以内なら普通は問題ない。 |
| jitter | 同期時のタイミングのばらつき(ms)。最初は統計が少なくて乱高下するので、同期開始から1日ぐらいしないと値を信用できない。一番大事なのはこの値。10以下なら問題ない。 |
サーバ状態記号の意味 
| ネットワーク距離が遠いため、もしくは、同期を試みたばかりなので、同期に使用していない。 | |
| x | 同期検査不合格により、使用しない。 |
| . | 利用者過多により使用しない。 |
| - | クラスタリング検査不合格により、使用しない。 |
| + | 利用可能サーバ。 |
| # | ネットワーク距離が遠いが使用可能なサーバ。 |
| * | 現在同期中のサーバ。 |
| o | PPSによる間接同期中のサーバ。 |
基本はここまでです。お疲れ様でした。
以下、自分で近場のntpを探す方法です。
では、最悪の場合に「clock.nc.fukuoka-u.ac.jp」を使わせてもらうにしても、サーバまでの途中経路のもっと近い位置に、時計サーバがあれば、そっちを使う方がよいに決まっています。まず、経路を調べてみましょう。「traceroute」コマンドを使って調べられます。tracerouteで検索する先は、必ずしもntpサーバでなくれもかまいません。もし思い当たるntpサーバがなければ、「traceroute
www.google.com」であたってみてもOKです。いくつかのサーバまでの経路を検索すれば、その中には意外と時計サーバが含まれているものです。また、お使いのプロバイダ(ISP)が時計サーバを明示して提供してくれているのなら、第一候補としてそれを使いましょう。
# traceroute clock.nc.fukuoka-u.ac.jp traceroute to clock.nc.fukuoka-u.ac.jp (133.100.9.2), 30 hops max, 38 byte packets 1 218.227.255.171 (218.227.255.171) 2.327 ms 1.929 ms 1.837 ms 2 218.227.255.190 (218.227.255.190) 1.871 ms 2.134 ms 2.546 ms 3 218.42.5.236 (218.42.5.236) 14.629 ms 15.044 ms 15.412 ms 4 133.205.1.54 (133.205.1.54) 15.518 ms 15.230 ms 14.787 ms 5 210.147.255.206 (210.147.255.206) 15.658 ms 14.593 ms 14.655 ms 6 210.254.187.69 (210.254.187.69) 15.165 ms 15.357 ms 15.157 ms 7 210.254.188.149 (210.254.188.149) 14.919 ms 15.726 ms 14.911 ms 8 61.207.14.21 (61.207.14.21) 22.316 ms 22.513 ms 33.900 ms 9 211.129.22.150 (211.129.22.150) 31.818 ms 32.386 ms 31.802 ms 10 211.122.13.70 (211.122.13.70) 32.800 ms 33.114 ms 32.547 ms 11 * * * 12 fww.net.fukuoka-u.ac.jp (133.100.242.2) 35.941 ms 36.055 ms 35.361 ms 13 * * * 14 * * * 15 hakata.nc.fukuoka-u.ac.jp (133.100.9.1) 35.940 ms 35.921 ms 35.754 ms 16 clock.nc.fukuoka-u.ac.jp (133.100.9.2) 35.391 ms 36.204 ms 35.966 ms
「clock.nc.fukuoka-u.ac.jp」まで15のルータを経由していて、最終的な遅延の目安は36/1000秒におよぶことがわかります。もちろん、ntpdは遅延を考慮して調整してくれますが、この遅延は少ないほどよいに決まっています。さて、途中経路のうち、12の経由地のIPアドレスがわかりましたので、近い方から順に、時計サーバとして使えるか試してみましょう。まずは最も近い、遅延も1.8/1000秒しかない「218.227.255.171」をみてみましょう。それには、ntpqコマンドを使います。
# ntpq -p 218.227.255.171 remote refid st t when poll reach delay offset jitter ============================================================================== +157.3.251.14 157.3.174.28 2 - 288 1024 377 9.410 -52.570 21.320 *157.3.174.26 157.3.174.29 2 - 327 1024 377 10.620 -26.403 10.620
あれ、いきなり見つけてしまいました。このような情報が得られれば、時間参照先として使える可能性大です。 こうして、いくつかのサーバが見つかったら、/etc/ntp.confに書き込みます。最低数は3つですが、同じぐらい短い遅延距離に多くのサーバが見つかったのなら、せっかくなので5つぐらい設定してしまっても良いです。
# Prohibit general access to this service. restrict default ignore restrict 127.0.0.1 server 218.227.255.171 server 218.227.255.190 server 133.205.1.54 restrict 218.227.255.171 mask 255.255.255.255 nomodify notrap noquery restrict 218.227.255.190 mask 255.255.255.255 nomodify notrap noquery restrict 133.205.1.54 mask 255.255.255.255 nomodify notrap noquery
3つのサーバを見つけたので、3つのIPアドレスを、serverとrestrictの項目に書き込んでおきます。これを保存して、「/etc/init.d/ntpd restart」でntpdを再起動します。ntpdの動作を確認するにも、「ntpq -p」コマンドを使います。
# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== 218.227.255.171 157.3.174.26 3 u 49 64 3 1.986 -137.47 0.374 218.227.255.190 157.3.251.14 3 u 49 64 3 2.059 -155.38 0.575 133.205.1.54 133.205.16.129 4 u 47 64 3 15.339 -1.404 0.647
refidが取得できて、reachが0出なければ、時刻の取得が成功しています。もし、refidは「.INIT.」のままで、rearchが0から増えなければ、残念ながらそのサーバは使えません。別のサーバを探してみてください。 数十分動かすと、だんだん時計が正確になってきます。試しに、有名なntpdサーバも入れてみました。
# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== -218.227.255.171 157.3.174.26 3 u 40 64 3 2.132 -139.86 0.205 +218.227.255.190 157.3.251.14 3 u 40 64 3 2.464 -158.88 0.599 -133.205.1.54 133.205.16.129 4 u 38 64 3 15.067 -1.509 0.441 *clock.tl.fukuok .GPS. 1 u 38 64 3 37.727 -2.741 0.690 +ntp1.jst.mfeed. 210.173.160.86 2 u 35 64 3 14.928 -0.606 0.147