−ntpで時刻合わせ−

いきさつ
特にって訳でもなかったのですが,サーバの時刻を正確にしようと思ったのは,主に以下の理由によります。
1 メールサーバを立ち上げてから,メールの送受信の時刻がどうもおかしくなるので,正確にしたい。
2 立ち上げたWEBページ(特にXOOPS)の掲示板などに関する時刻が正しくない。
3 作成したファイルをftp転送するとき,ファイルの作成日時がWindows機と異なるので,上書きの確認ができにくい。
といったところです。ちなみにWindows機は,ルータのntpサーバ機能を使って,時刻を同期させています。サーバもこれにならえばいいのですが,何事も勉強のため「ntpで時刻合わせ」となりました。
動作確認
RedHatLinux7.3では,はじめからntpがインストールされているので,改めてインストールの必要はありません。一応インストールされているファイルを確認します。
$ rpm -q ntp
ntp-4.1.1-1
これで確認は完了です。確かにインストールされています。
続いて動作の確認をします。ここで,忘れてはならないことは,ntp(123)のパケットをサーバでもルータでも許可してやることです。
早速起動させてみましょう。
# service ntpd start
まはは
# /etc/init.d/ntpd start
私の場合はすでに起動していました。次に,以下コマンドで,動作の確認をします。
# ntpq -p 133.100.9.2
      remote           refid      st t when poll reach   delay   offset    jitter
 ================================================================================
 *GPS_NMEA(1)     .GPS.            0 l   8   16  377    0.000   -0.002    0.020
 +clock.tl.fukuok .GPS.            1 u   59   64  376    3.080   -0.076    0.040
  helio.tl.fukuok .0.0.0.0        16 -    - 1024    0    0.000    0.000  16000.0
 xgeo.gen.u-ryuky .GPS.            1 u  248 1024  377   38.710   -75.112   5.520
 -ns.hiroshima-u. .GPS.            1 u  213   64  376    17.23   -0.724    2.14
うまく動いていれば,上のように通信状態を表示します。一番左に「*」印が付いているサーバが同期中のサーバのようです。(最初は表示されませんが,しばらくすると「*」印が表示されます。私の場合20分程度経過してから表示されました。)
各項目の意味は,
※1項目目
' '(reject)距離が遠くて参照リストから外れたサーバー
'x'(falsetick)falseticker検査で参照リストから外れたサーバー
'.'(excess)参照サーバーが多くて参照リストから外れたサーバー
'-'(outlyer) クラスタリング検査で参照リストから外れたサーバー
'+'(candidat)接続テストに合格し、いつでも参照可能なサーバー
'#'(selected)同期距離が遠いが参照可能なサーバー
'*'(sys.peer)同期中であると宣言されたサーバー
'o'(pps.peer) 同期中であると宣言されたサーバー(同期はPPS信号から間接的に行なう。)
※2項目目以降の意味
remoteリモート・サーバーのホスト名
refid参照ID(不明の場合は、0.0.0.0)
ststratum番号、サーバーが第何階層かを表します。
t階層タイプ(l:local,u:unicast,m:multicast,b:broadcast)
when最後のパケットを受け取ってからの時間(単位:秒)
pollポーリング間隔(単位:秒)
reach到達可能なレジスタ・データ(8進数表現)
delayパケット往復時間の遅延見積もり(単位:ミリ秒)
offset時刻サーバとのずれ(単位:ミリ秒)
jitter分散(単位:ミリ秒)
です。すべて受け売りです。
時刻合わせ
では,ntpdateコマンドで時刻合わせをしてみましょう。
# ntpdate 133.100.9.2
14 Dec 02:08:21 ntpdate[15310]: the NTP socket is in use, exiting
このメッセージが表示されて,時刻が同期できません。ntpdを起動すると常にntpソケットをオープンしているので,ntpdateが実行できませんが,ntpdが自動実行しているので問題ありません。すぐに時刻を合わせたい場合は,ntpdを停止してからntpdateを実行します。
# service ntpd stop
ntpdを停止中                       [ OK ]
# ntpdate 133.100.9.2
14 Dec 08:35:31 ntpdate[21972]: step time server 133.100.9.2 offset -178.284741
時刻の同期がとれました。
環境設定
さて,時刻合わせの環境設定です。いちいちntpdateコマンドで時刻合わせをするのは面倒なので, /etc/ntp.confファイルを編集して,国内向け公開サーバを指定します。
# vi /etc/ntp.conf
server 133.100.9.2
server 133.100.11.8
server 203.139.30.195
server 203.255.112.4

 driftfile /etc/ntp/drift
driftファイルは,元々この場所にありました。このファイルには,内蔵時計が進む傾向にあるのか、遅れる傾向にあるのか, またそれはどの程度なのかが記録されます。
これで完了のはずです。ntpdを起動させます。
# service ntpd start
ntpdを起動中                       [ OK ]
#
システム起動時に起動させるときは,chkconfigなどで設定します。 RedHatLinux7.3は初期設定で自動起動するようになっています。


このサイトに関するお問い合わせはlinux@kitahotaru.comまでお願いいたします。