NTPを使わない。サーバ時刻あわせ (httpで時刻合わせ)
httpで時刻情報を持つサイトに行って、サーバと時間を同期させる方法。
**正解は末尾のスクリプトです。
NTPサーバとか便利なものがあるのになぜこのようなことをしなければならないかというと、イントラネットなど特定の条件ではhttpしかプロトコールを許可していないことが多いから。
——————以下スクリプトと説明—————–
#!/bin/sh
cd /tmp/timeajust
#作業ディレクトリへ移動。
rm index.*
#前回作成したindex.htmlとindex.timeを消去。すなわちディレクトリの初期化。
wget http://www.yahoo.co.jp/index.html
#wgetでyahooのトップ画面をダウンロード
tail -1 index.html | awk ‘{print $7}’ > index.time
#時刻が記載されているページソース最後の行を取り出し、かつ7番目のフィールドの時刻表示をさらに取り出しindex.timeというテキストファイルにする。
var=`cat index.time`
#ファイルの内容をverという名称の変数に格納。
date -s $var
#dateコマンドでシステムクロックをvar内格納値へ変更。
hwclock –systohc
#ついでにハードウェア時間も同期。
——————-スクリプトと説明終わり——————-
スクリプトが稚拙なせいか、同期に0.5秒ぐらいかかる。まあ動くからこれでいい。
トータル誤差1秒ほどあるので厳格な方にはお勧めできない。
もしyahooの都合で書式が変えられたら時刻を取得できなくなる。
実は日本標準時プロジェクトのサイト
http://ntp-a1.nict.go.jp/cgi-bin/time
を利用したほうがよいとスクリプト作ってから気づいた。
追記:日本標準時プロジェクトのサイトを使用した改良版
varをいっきに格納して行数を減らしタイムラグを小さくした。
—————————————————
#!/bin/sh
cd /tmp/timeajust
wget http://ntp-a1.nict.go.jp/cgi-bin/time
var=`tail -1 time | awk ‘{print $4}’`
date -s $var
/sbin/hwclock –systohc
rm time
—————————————————-
2010年03月19日
追記
日本標準時プロジェクトがhttpでのサービスをやめてしまったので、http://worldtimeapi.org を使用した。
#!/bin/sh
wget http://worldtimeapi.org/api/timezone/Asia/Tokyo.txt
sed -n 3p Tokyo.txt | cut -c 22-29 > index.time
var=`cat index.time`
date -s $var
hwclock –systohc
rm Tokyo.txt index.time
コメントを残す