#!/bin/bash
# DNSのnamed.rootファイルの更新確認スクリプト
# 最新版のnamed.rootファイルを取得し、差分を確認する。
# 更新履歴
# 2014.02.07 watari
# お約束
export LANG=C
## 実行ディレクトリ
#PRGDIR=/usr/local/bin
## 実行スクリプト名
PRGNAME=named_hint_check.sh
## named.rootの一時保存場所
TMPDIR=/tmp
## bindのconfigディレクトリ
BINDCONFDIR=[BINDのzoneファイルが設置してあるパス(/etc/bind など)]
## 確認対象ファイル
BINDFILE=[named.confで指定しているファイル名(named.ca など)]
## GETするサーバリスト
GETSRVARRAY=("ftp.internic.net" "ftp.rs.internic.net")
## GETするファイル名
GETFILENAME=named.root
## GETするディレクトリ名
GETDIRNAME=domain
## 宛先メールアドレス
MAILADDR=異常時のメール送信先(name@domain)
## ログ出力先
LOGFILE=/var/log/named_hint_check.log
# おまじない
## メール送信関数(${MAILADDR}宛)
## kw_sendmail "件名" "本文"
kw_sendmail() {
echo -e "$2" | nkf -j | mail -a 'MIME-Version: 1.0' \
-a 'Content-Type: text/palin;charset="iso-2022-jp"' \
-s "$1" ${MAILADDR}
}
## ファイル取得関数
## kw_getfile "プロトコル" "サーバ"
kw_getfile() {
wget -T 15 -t 1 ${1}://${2}/${GETDIRNAME}/${GETFILENAME} > /dev/null 2>&1
if [ $? != 0 ]; then
### 失敗したが、確認のため再度GET
wget -T 15 -t 1 ${1}://${2}/${GETDIRNAME}/${GETFILENAME} > /dev/null 2>&1
if [ $? != 0 ]; then
return 1
fi
fi
}
## ログ記載関数
## kw_log "ログの内容"
kw_log() {
echo "`date '+%b %d %T' ` `hostname` ${PRGNAME}: ${1}" >> ${LOGFILE}
}
## iptables設定関数
## kw_iptables "FQDN"
kw_iptables() {
IPADDR="`/sbin/ifconfig eth0 | awk -F ":" '/inet addr/ { split($2,a," "); print a[1] }'`"
sudo iptables -A OUTPUT -s ${IPADDR} -d ${1} -j ACCEPT
IPNUM=`sudo iptables -L OUTPUT --line-numbers | tail -n 1 | awk '{ print $1 }'`
}
# お仕事開始
## 作業ディレクトリに移動
cd ${TMPDIR}
## named.root ダウンロード開始
kw_getfile "http" "${GETSRVARRAY[0]}"
if [ $? != 0 ]; then
kw_iptables "${GETSRVARRAY[0]}"
kw_getfile "ftp" "${GETSRVARRAY[0]}"
if [ $? != 0 ]; then
kw_log "{GETSERVARRAY[0]}: ${GETFILENAME} の取得に失敗しました。"
kw_getfile "http" "${GETSRVARRAY[1]}"
if [ $? != 0 ]; then
kw_iptables "${GETSRVARRAY[1]}"
kw_getfile "ftp" "${GETSRVARRAY[1]}"
if [ $? != 0 ]; then
### ログに記載
kw_log "{GETSERVARRAY[0]}: ${GETFILENAME} の取得に失敗しました。"
### メール送信
kw_sendmail "${GETFILENAME} diff check script NG!" "${GETFILENAME} のダウンロードに失敗しました。\n担当者は 確認して下さい。"
### 異常終了
exit 1
else
PROTO="ftp"
GETSERVNAME="${GETSRVARRAY[1]}"
sudo iptables -D OUTPUT ${IPTNUM}
fi
else
PROTO="http"
GETSERVNAME="${GETSRVARRAY[1]}"
fi
else
PROTO="ftp"
GETSERVNAME="${GETSRVARRAY[0]}"
sudo iptables -D OUTPUT ${IPTNUM}
fi
else
PROTO="http"
GETSERVNAME="${GETSRVARRAY[0]}"
fi
## 差分確認
diff ${TMPDIR}/${GETFILENAME} ${BINDCONFDIR}/${BINDFILE} > /dev/null 2>&1
if [ $? != 0 ]; then
### 取得ファイルのシリアルを確認
GETSERIAL=`grep version ${TMPDIR}/${GETFILENAME} | awk '{ print $7 }'`
NOWSERIAL=`grep version ${BINDCONFDIR}/${BINDFILE} | awk '{ print $7 }'`
if [ ${GETSERIAL} -gt ${NOWSERIAL} ]; then
### ログに記載
kw_log "${PROTO}://${GETSERVNAME}: ${GETFILENAME} が更新されているようです。${BINDFILE} を確認して下さい。"
### メール送信
kw_sendmail "${GETFILENAME} diff check script NG!" "${BINDFILE} が更新されているようです。\n担当者は差分内容を確認して対応してください。\n${PROTO}://${GETSERVNAME}/${GETDIRNAME}/${GETFILENAME} が該当ファイルです。"
else
kw_log "${PROTO}://${GETSERVNAME}: ${GETFILENAME} の更新は必要ありません。"
fi
else
kw_log "${PROTO}://${GETSERVNAME}: ${GETFILENAME} の差分はありません。"
fi
## 一時ファイルを削除
rm ${TMPDIR}/${GETFILENAME}
exit 0
2014年2月15日土曜日
DNS named.root 更新確認スクリプト
2014年2月3日月曜日
壁紙チェンジャー改良
前回のスクリプトから、さらに機能追加して、壁紙ディレクトリを選択できるように改良した。
(しかもGUIで可能!)
$ vi /usr/local/bin/wpchange
#!/bin/bash
# wallpaper changer
# 2014.01.25 ver 1.0 watari
# とりあえず作成
# 2014.02.03 ver 2.0 watari
# 壁紙ディレクトリの指定機能を追加
# 2014.03.25 ver 2.1 watari
# ディレクトリ選択時にキャンセルした場合の処理を追加
# crontab指定
# --- ココカラ ---
# # 壁紙チェンジャー
# */15 * * * * /usr/local/bin/wpchange -c > /dev/null 2>&1
# --- ココマデ ---
# ここの時間指定で変更タイミングを修正する。
# お約束
## 更新対象(壁紙ディレクトリ)
PCMANDIR="${HOME}/.config/pcmanfm/LXDE"
WPCONF="${PCMANDIR}/pcmanfm.conf"
DIRCONF="${PCMANDIR}/pictdir.conf"
# お仕事開始
## オプションによる機能選択
case $1 in
--selectdir | -s)
## お約束
PICTDIR=`zenity --file-selection --title "壁紙ディレクトリの選択" --directory`
if [ $? -eq 0 ]; then
## ディレクトリ設定ファイルの存在確認
if [ ! -f ${DIRCONF} ]; then
touch ${DIRCONF}
fi
## 指定されたディレクトリを設定ファイルへ書き込む
echo ${PICTDIR} > ${DIRCONF}
## GUIにて設定完了のお知らせ
zenity --info --title="設定完了のお知らせ" --text="壁紙ディレクトリに ${PICTDIR} を指定しました。"
## おしまい
exit 0
else
## メッセージなしに終了
exit 0
fi
;;
--changepict | -c)
WPDIR=`cat ${DIRCONF}`
##ファイル一覧
WPLST=($(ls ${WPDIR}))
## 要素数
i=${#WPLST[@]}
## 現在の壁紙
NOWWP=`grep "wallpaper=" ${WPCONF} | awk -F"=" '{ print $2 }'`
## 変更予定の壁紙
RAND=$(((RANDOM % ${i})+1))
NEXTWP=${WPLST[${RAND}]}
if [ ${NOWWP} == ${NEXTWP} ]; then
RAND2=$(((RANDOM % ${i})+1))
NEXTWP=${WPLST[${RAND2}]}
fi
pcmanfm -w ${WPDIR}/${NEXTWP}
exit 0
;;
*)
if [ ! ${DISPLAY} == "" ]; then
zenity --warning --text="利用できるオプションは、--selectdir または -s と、--changepict または -c の2種類です。"
exit 1
else
echo "Usage: $0 Option Failed."
echo " MUST with --selectdir(-s) or --changepict(-c)."
exit 1
fi
;;
esac
exit 0
これ1つでオプション指定によって2つの機能が利用できる。
登録:
コメント (Atom)
DNS named.root 更新確認スクリプト
#!/bin/bash # DNSのnamed.rootファイルの更新確認スクリプト # 最新版のnamed.rootファイルを取得し、差分を確認する。 # 更新履歴 # 2014.02.07 watari # お約束 export LANG=C ## 実行ディレクトリ #PR...
-
fj.os.linux/japan.comp.linux を参照。 ファイルハンドルとは、オープンしているサーバ上のファイルを指し示すためにクライアント側が持っている識別子のことです。 その識別子が指し示しているファイルがサーバ上で無くなってしまったり、アクセスできなかったりした...
-
前回のスクリプトから、さらに機能追加して、壁紙ディレクトリを選択できるように改良した。 (しかもGUIで可能!) $ vi /usr/local/bin/wpchange #!/bin/bash # wallpaper changer # 2014.01.25 ver 1.0 w...
-
#!/bin/bash # DNSのnamed.rootファイルの更新確認スクリプト # 最新版のnamed.rootファイルを取得し、差分を確認する。 # 更新履歴 # 2014.02.07 watari # お約束 export LANG=C ## 実行ディレクトリ #PR...