1月 302013
 
シェアする

CentOSにて時刻を合わせるといったら、
Network Time Protocolを意味する「ntp」を思い出す方も多いと思います。

NTP: The Network Time Protocol
http://www.ntp.org/

今回は、外部との接続をWebプロキシで制限されている環境下にて、時刻を外部サーバと同期させたいと思ったのが始まり。ntpはUDP接続を外部サーバの123番ポートに行い時刻の同期を行うのだが、この外部へのUDP接続が制限されている環境ではもちろん外部サーバとの時刻同期は行えず同期が失敗する。

そこで、少しGoogle先生にお相手いただきインターネット検索を行ったところ、HTTP Time Protocolというものがあった。これは、文字通りHTTP接続を用いて外部サーバに接続しHEADメゾッドを用いてHTTPヘッダーを取得し、HTTPヘッダーに記載されている時刻を元に時刻を同期するという作戦だ。

以下にHTPを使った時刻同期方法を説明する。

参考としたのは以下のサイト

HTTP Time Protocol
http://www.vervest.org/htp/

0. 必要となるperlモジュールをインストールしておく

# yum -y install perl-libwww-perl

1. ページトップから、「HTP Download (perl) 」をクリックし、ページ下のほうにあるダウンロードリンクをコピーしてくる。

本日の時点でのリンクはこちら ⇒ http://www.clevervest.com/htp/archive/perl/htp-0.9.3.tar.gz

2. 作業用ディレクトを/root/配下に作成

# mkdir /root/htp/

3. 作成したディレクトリへ移動し、Webプロキシ設定をexportし、対象ファイルをwgetする

# export http_proxy=http://your.proxy.com:8080/
# wget http://www.clevervest.com/htp/archive/perl/htp-0.9.3.tar.gz

3. 取得したファイルを展開する。

# tar zxf  htp-0.9.3.tar.gz

4. 展開したファイル一覧を確認する。

# find ./htp-0.9.3/

ここまでで必要となるスクリプトの展開が終わりました。

開したスクリプトを用いて独自のコマンド「htpdate」を/root/bin/配下に作成しましょう。

プロキシ配下からHTPを用いて時刻同期を行う場合には、「htp-0.9.3/sbin/htpdate-light」を使います。

htpdate-lightの具体的な使い方は以下の通り

# htpdate-light -d -s プロキシサーバ -p ポート番号 同期対象サーバ

展開したHTPスクリプトまでのパスは、私の場合は「/root/htp/htp-0.9.3/sbin/htpdate-light」ですので、これに「 -s プロキシサーバ -p ポート番号 www.ibm.com」を追加してやります(注意:プロキシサーバとポート番号はそれぞれの環境で異なります)。

例: /root/htp/htp-0.9.3/sbin/htpdate-light -s my.proxy.srv -p 8080 www.ibm.com

上記の1行を実行すれば、時刻の同期が行われますので、上記の一行を/root/bin/htpdateに記載し、「htpdate」で実行できるようにしましょう。もし、/root/bin/がない場合は前もってmkdir /root/binを行っておいてください。

# echo "/root/htp/htp-0.9.3/sbin/htpdate-light -s my.proxy.srv -p 8080 www.ibm.com" > /root/bin/htpdate
# chmod +x /root/bin/htpdate
# htpdate
Setting time... 2013年  1月 30日 水曜日 10:41:54 JST

これで、「htpdate」で実行できるようになりました。

cronを用いて定期的に「htpdate」が実行されるように設定しましょう。

rootユーザのcrontabを編集し、以下の一行を追加します。

# crontab -e
52 * * * * /root/bin/htpdate > /dev/null 2>&1

編集後は、crontab -l で確認します。

# crontab -l

上記の「52 * * * *」は、毎時52分にhtpdateを実行するという記述です。特に理由はありません。1時間に1回でも、1日に一回でもお好きに設定してください。ただ、私が設定したのが50分頃で、設定を行ったあとに tail -f /var/log/cron で観察し、正しく動くかを確認するためにこの時刻になりました。

このエントリーをはてなブックマークに追加

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ