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 で観察し、正しく動くかを確認するためにこの時刻になりました。
コメント