連載
» 2015年07月08日 05時00分 UPDATE

ネットワーク管理の基本Tips:サーバーの時刻合わせコマンド、ntpdateはどのサーバーを参照すべき?

コンピューターの内蔵時計は概して精度が低く、時間のズレが生じやすいため、Linuxを含む多くのOSではNTP(Network Time Protocol)を使いNTPサーバーに日付と時刻を問い合わせ、正確な日付と時刻をローカルホストに設定します。「ntpdate」はNTPサーバーへの問い合わせを手動で行うためのコマンドです。

[海上忍,@IT]

バックナンバー

連載バックナンバー

 本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、サーバーの時刻合わせに必須のコマンド「ntpdate」を紹介します。

 なお、本連載では、執筆時点の最新版Red Hat Enterprise Linux(RHEL)およびCentOS環境で動作を確認しています。また、用法事例はIPv4(Internet Protocol version 4)ネットワークを前提にしています。コマンドのサンプルなどで一部環境に依存した出力例となる場合がありますので、その際には適宜ご自身の環境に合わせて読み替えてください。

日付と時刻をNTPサーバーと同期する

ntpdate [オプション] NTPサーバー

※[ ]は省略可能な引数を示しています。


ntpdateコマンドとは?

 サーバーの時刻合わせは、さまざまなログデータの前後関係を正確に維持したり、アプリケーションの動作を確実なものにしたりする上で必須の操作です。

 ntpdateコマンドは、原子時計や標準電波などの正確な時刻源を持つ上位NTPサーバーに時刻を問い合わせ、その戻り値をローカルホスト(手元のNTPサーバー)に設定します。一時的に手動で時刻合わせをしたいときや、cronなどのスクリプトを定期実行するサービスで時刻合わせを設定しておくときに利用します。

 ntpdateコマンドには、「slew」と「step」という二つの時刻合わせモードが存在します。前者はシステムコールに「adjtimex()」を利用することで、システム時間の進み方を遅く/速く調整して徐々に時刻合わせを行います。後者はシステムコールに「settimeofday()」を使い、NTPサーバーに照会した時刻を直ちにシステム時間へ反映します。大きなズレがある場合や進み過ぎた時刻を戻す場合には、修正後のログの整合性を維持するためにslewモードを使う場合が多いでしょう。

 なお、日本国内から海外のNTPサーバーを参照すると、通信遅延などにより十分な精度が得られません。照会先のNTPサーバーには、利用しているISPが提供するものや国内の公開NTPサーバー(後述の表2)を利用します。照会先サーバーはネットワークに依存性がなく安定しているものを選ぶべきなので、ネットワーク的に最も近い、利用中のISPが運営するNTPサーバーが最適でしょう。公開NTPサーバーでは、NICT(情報通信研究機構)が運営するサーバーの時刻精度が日本標準時に対して10ナノ秒(1億分の1秒)以内、処理能力も毎秒100万リクエスト以上と、信頼性とキャパシティの両面から推奨できます。


主なオプション

 ntpdateコマンドの主なオプションは次の通りです。

表1 主なオプション
オプション 意味
-B slewモードで強制的に時刻を修正する
-b stepモードで強制的に時刻を修正する
-d デバッグモード(時刻を修正しない)
-q 日付と時刻の問い合わせのみ実行する(時刻を修正しない)
-s コマンドの実行結果をsyslogに出力する
-v 詳細情報を表示する

日本国内の公開NTPサーバー

 各ISPが提供するNTPサーバー以外で、ntpdateコマンドと併せて利用できる国内の公開NTPサーバーのアドレスは次の通りです。

表2 個人利用が許可されている国内の公開NTPサーバー
提供組織 アドレス
独立行政法人 情報通信研究機構(NICT) ntp.nict.jp
インターネットマルチフィード(MFEED) ntp.jst.mfeed.ad.jp
国立天文台 s2csntp.miz.nao.ac.jp
Ring Server Project ntp.ring.gr.jp
NTP POOL PROJECT jp.pool.ntp.org

サーバーの内蔵時計のズレを確認するには?

 内蔵時計の調整を行わず、現在時刻とのズレ幅を確認するだけの場合は「-q」オプションと、NTPサーバーのアドレスを指定します。

 なお、問い合わせた上位のNTPサーバーとのズレが500ミリ秒以上の場合は「set time server」、500ミリ秒以内の場合は「adjust time server」という文字列がメッセージに含まれます。

 下の例では、NICTのNTPサーバーを参照しています。出力結果を見ると、ズレが500ミリ秒以下だと分かります。なお、offset値はNTPサーバーとシステム時刻のズレ、delay値はNTPサーバーに接続するための推定遅延時間を意味します(いずれも単位はミリ秒)。

$ ntpdate -q ntp.nict.jp
server 133.243.238.243, stratum 1, offset 0.016408, delay 0.03514
server 133.243.238.164, stratum 1, offset 0.016792, delay 0.03502
server 133.243.238.244, stratum 1, offset 0.016674, delay 0.03404
server 133.243.238.163, stratum 1, offset 0.016381, delay 0.03484
19 Jun 21:03:53 ntpdate[10050]: adjust time server 133.243.238.244 offset 0.016674 sec

slewモードでじわじわ時刻合わせをするには?

 NTPサーバーと時刻合わせするとき、徐々にそろえる場合はslewモード(-Bオプション)、一気に合わせたい場合はstepモード(-bオプション)を利用します。

 オプションを付けずにntpdateコマンドを実行した場合、NTPサーバーとの時刻のずれが500ミリ秒以上の場合はstepモード、500ミリ秒以下の場合はslewモードが適用されます。なお、ntpd(NTPデーモン)が稼働している環境で実行すると、「the NTP socket is in use, exiting」と表示され同期に失敗します。

 下の例は、NICTのNTPサーバーを参照してslewモードで時刻合わせを行う場合のサンプルです。サーバーの時刻合わせを行うため、この操作を行う場合はsudoなどでシステム管理者になっておく必要があります。

$ sudo ntpdate -B ntp.nict.jp
19 Jun 21:06:48 ntpdate[10075]: adjust time server 133.243.238.243 offset 0.002704 sec

「ネットワーク管理の基本Tips」バックナンバー

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。