手当たり次第に書くんだ

飽きっぽいのは本能

VALUE-DOMAINのダイナミックDNS更新スクリプトを作ってみた

以前に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更新スクリプトを作ってみた

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る