以前htpdateコマンドを使ったプロキシー同期方法を紹介しましたが、それ以上にすっきりとした簡単な方法を発見したので記事にしてみます。作成するシェルスクリプトはたったの3行。これだけで時刻の同期ができるようになります。
手順としてはこんな感じ
- シェルスクリプトの作成
- プロキシサーバー情報の設定
- curlコマンドを使って www.google.com のヘッダーから時刻の取得
- date -s コマンドを使ってサーバー時刻の設定
上記の手順を含むbashシェルスクリプトを作成し、それをcronでまわしてあげます。
1. bashスクリプトファイルの作成
名前(任意):getTime.sh
ファイルの一行目に以下の記述を行います。
#!/bin/bash
この記述は、「このファイルはbashシェルスクリプトですよ」と宣言をするものです。
私は「/root/bin/」というディレクトリを作り、ここに独自に作ったスクリプトを作成、権限を付与し利用しています。
# mkdir /root/bin/
# echo "#!/bin/bash" > /root/bin/getTime.sh
# chmod +x /root/bin/getTime.sh
2. プロキシー情報の設定
利用しているプロキシサーバ情報の例として以下を利用して説明します。
プロキシサーバー:this.is.test.proxy.local
プロキシサーバーポート:8080
認証ユーザー:momotarou
パスワード:onigashima
上記1.で作成したファイルに以下のとおり記述を追加します。もし、ユーザー認証が必要のないWebプロキシーの場合は「ユーザー名:パスワード」の記述は必要ありません。
#!/bin/bash export http_proxy=http://momotarou:onigashima@this.is.test.proxy.local:8080/
3. curlコマンドを使って GoogleのWebページから時刻を取得します
curl -I を用いて「http://www.google.com/」のヘッダーを取得します。
取得された結果から「Date」で始まる行のみを取得します。
Dateで始まる行をスペース区切りで分割し、2つ目以降を取得します。
# curl -I "http://www.google.com/" 2>&1 | grep ^Date | cut -d ' ' -f2-
結果として、「Tue, 08 Jul 2014 03:19:42 GMT」のように表示されればOKです。
4. date -sを使って時刻を設定します。
上記3.で確認したコマンドを使って、date -sを用いて時刻を設定する1行を作成します。「$( )」は括弧で囲まれた部分を事前に実行するという書き方です。
では、今まで編集していたファイルに記述を追加しましょう。
#!/bin/bash export http_proxy=http://momotarou:onigashima@this.is.test.proxy.local:8080/ date -s "$(curl -I "http://www.google.com/" 2>&1 | grep ^Date | cut -d ' ' -f2-)"
以上でスクリプトの作成は完了しました!
cronの設定を行い、動作確認を行いましょう
ここではひとまずの動作確認を行いたいので、毎分(* * * * *)実行されるようにします。
# crontab -e * * * * * /root/bin/getTime.sh > /dev/null 2>&1
crontab -e でcron設定を編集し、毎分に時刻同期が行われるようにの設定を行いました。変更が完了したらESC→:wq→Enterで保存します。
動作確認を行うには、まずは現在の時刻をずらしておきます。以下の設定は、現在の時刻 -5秒 に時刻を設定するコマンドです。
# date -s "$(date -d '-5 secs' +"%Y-%m-%d %H:%M:%S")"
では、dateコマンドを使って時間が変更されるか観察しましょう。
以下のコマンドは、1秒ごとにdateコマンドを実行するwhile文を用いたコマンドです。とめるときはCtrl+Cで停止します。
# while true ; do date ; sleep 1 ; done
2014年 7月 8日 火曜日 12:27:58 JST
2014年 7月 8日 火曜日 12:27:59 JST
2014年 7月 8日 火曜日 12:28:00 JST
2014年 7月 8日 火曜日 12:28:01 JST
2014年 7月 8日 火曜日 12:28:07 JST
2014年 7月 8日 火曜日 12:28:08 JST
2014年 7月 8日 火曜日 12:28:09 JST
2014年 7月 8日 火曜日 12:28:10 JST
そうすると、上記赤い部分にて、時刻が修正され、5秒(ここでは6秒差ですが気にしないでください)追加されたことがわかります。
最後に、cronの設定を変更して、適切なタイミングで実行されるようにしましょう。私の場合、毎時42分に時刻同期するようにしました。
# crontab -e 42 * * * * /root/bin/getTime.sh > /dev/null 2>&1
おしまい。
参考:
http://superuser.com/questions/197009/wget-head-request
コメント