以前にPHPで作ってみたんだけど、CentOS6では何故かうまく動かなかったのでBシェルで作り直してみた。
スクリプトは下記の通り。
[root@centos ~]# vim /root/bin/vdupdate.sh
#!/bin/sh Fqdn='dyn.value-domain.com' Domain='si1230.com' # ドメイン名を環境に合わせて設定 Password='xxxxxxxx' # パスワードを環境に合わせて設定 Host=$1 # ホスト名を引数にする Url="http://$Fqdn/cgi-bin/dyn.fcg?d=$Domain&p=$Password&h=$Host" WLog=`mktemp` WFile=`mktemp` LDir="/var/log/vdupdate/$1" LFile="$LDir/update.log" Error="$LDir/error.log" LDate=`date +"%Y/%m/%d %H:%M:%S"` Mailto='admin@si1230.com' # エラー時の通知先メールアドレス Subject='VDUPDATE Error' # ログディレクトリが無かったら作る if [ ! -d $LDir ]; then mkdir -p $LDir fi # 引数にホスト名が設定されてなかったらエラーログとメールを出して停止 if [ ! -n "$Host" ]; then EMsg='Host argument is not set!' echo "$LDate $EMsg" >> $Error | echo "$0 $EMsg" | mail -s "$Subject" "$Mailto" exit fi wget "$Url?d=$Domain&p=$Password&h=$Host" -o $WLog -O $WFile # メッセージはGoogle翻訳そのまま Result=`awk -F '=' '/status=/{print $2}' $WFile` # ステータスコードのみ取得 LFormat="$Host.$Domain: Status=$Result:" Status0="Update successful" Status1="Bad request" Status2="Password and an incorrect domain name" Status3="Invalid IP address" Status4="Passwords do not match" Status5="Database server is congested" Status9="Other errors" # ログ書き込みとステータスコードが0(正常)以外はメール case $Result in '0') echo "$LDate $LFormat $Status0" >> $LFile ;; '1') echo "$LDate $LFormat $Status1" >> $LFile | echo "$0 $LFormat $Status1" | mail -s "$Subject" "$Mailto" ;; '2') echo "$LDate $LFormat $Status2" >> $LFile | echo "$0 $LFormat $Status2" | mail -s "$Subject" "$Mailto" ;; '3') echo "$LDate $LFormat $Status3" >> $LFile | echo "$0 $LFormat $Status3" | mail -s "$Subject" "$Mailto" ;; '4') echo "$LDate $LFormat $Status4" >> $LFile | echo "$0 $LFormat $Status4" | mail -s "$Subject" "$Mailto" ;; '5') echo "$LDate $LFormat $Status5" >> $LFile | echo "$0 $LFormat $Status5" | mail -s "$Subject" "$Mailto" ;; '9') echo "$LDate $LFormat $Status9" >> $LFile | echo "$0 $LFormat $Status9" | mail -s "$Subject" "$Mailto" ;; esac rm -f $WLog $WFile
パスワード、ドメインを引数にしても良いが、パーミッションを考慮して直書きにする。あとはVALUE-DOMAINが公表しているステータスコードがいいかげんだ。パスワードが間違っていても正常(0)を返してくる。その他は簡単に確認したのみ。
そしてrootのみ実行可能にする。
[root@centos ~]# chmod 700 /root/bin/vdupdate.sh
cronに登録する。実行するユーザごとにファイルを分けている。
[root@centos ~]# vim /etc/cron.d/root
*/30 * * * * root /root/bin/vdupdate.sh www */30 * * * * root /root/bin/vdupdate.sh www1 */30 * * * * root /root/bin/vdupdate.sh www2
一応、ログローテーション設定をしてみる。Yumの設定を参考に。
[root@centos ~]# vim /etc/logrotate.d/vdupdate
/var/log/vdupdate/*log { missingok # ログファイルが存在しなくてもエラーを出さない notifempty # ログファイルが空ならローテーションしない size 30k # これより大きい場合にローテーションする monthly # 月次でローテーションする create 0600 root root # ローテーション後に新たな空のログファイルを作成 }
[ad#ad-1]
VALUE-DOMAINのダイナミックDNS更新スクリプトを作ってみた