#!/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
mydb
何でもメモ帳
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つの機能が利用できる。
2014年1月25日土曜日
lxdeで壁紙チェンジャーを作る
$ vi /usr/local/bin/wpchange.sh --- ココカラ --- #!/bin/bash # wallpaper changer # 2014.01.25 watari # ver 1.0 # # お約束 ## 更新対象(壁紙ディレクトリ) WPDIR=$1 ##ファイル一覧 WPLST=($(ls ${WPDIR})) ## 要素数 i=${#WPLST[@]} ## 現在の壁紙 NOWWP=`grep "wallpaper=" ${HOME}/.config/pcmanfm/LXDE/pcmanfm.conf | 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 --- ココマデ --- $ chmod 755 /usr/local/bin/wpchange.shこれで、ディレクトリを指定したら、ランダムに壁紙が変わるので、
$ crontab -e --- ココカラ --- */15 * * * * /usr/local/bin/wpchange.sh "ディレクトリパス" > /dev/null 2>&1 --- ココマデ ---を指定したらOK。 この場合、15分ごとにランダムに壁紙が変わる。「*/15」を適当に変更すれば更新タイミングが変わる。
2013年7月9日火曜日
Pythonで差し込みメール送信 その2
前のは処理がスマートでないのと、値1、値2を複数埋め込む必要があったのとで、改良
mailsend.py
#!/usr/bin/env python #coding: utf-8 # CSVからメール送信スクリプト # Ver 1.5 わたり 2013.07.09 # 使い方 # /path/to/mailsend.py csv_filename # おまじない import sys import csv import smtplib from email.MIMEText import MIMEText from email.Header import Header from email.Utils import formatdate argvs = sys.argv # 引数の確認 # CSVファイルの指定がない場合には、終了 if (len(argvs) != 2): print 'Usage: $ %s CSV_filename' % argvs[0] quit() # CSVファイルの読み込み csvline = csv.reader(open(argvs[1], 'rb'), delimiter = ',', quotechar='"') for row in csvline: if __name__ == "__main__": # お約束 ## メールサーバ mailsv = "メールサーバアドレス" ## 送信元メールアドレス from_address = "送信者メールアドレス" ## 送信先メールアドレス to_address = unicode(row[0], "utf-8") ## CC メールアドレス cc_address = "ccするメールアドレス" ## 名前 その1 to_name1 = unicode(row[1], "utf-8") ## 名前 その2 to_name2 = unicode(row[2], "utf-8") ## 値1 と 値2(1つ目) ataiinfo = row[3] + u"\t" + row[4] + u"\n" ## 値1 と 値2(2つ目以降) ### 個数分ぶんまわし if (len(row) > 5): for acount in range(5, len(row) - 1, 2): ainfo = row[acount] + u"\t" + row[acount + 1] + u"\n" ataiinfo += ainfo ### ぶんまわし ここまで ## 文字エンコードの指定 charset = "ISO-2022-JP" ## 件名 subject = u"メール件名を入力。" ## 本文(ここから) text = to_name1 + u''' ''' + to_name2 + u''' 様 ここは好きに、 書いて下さい。本文です。 ''' + ataiinfo + u''' 末尾の御挨拶など。''' ## 本文(ここまで) msg = MIMEText(text.encode(charset),"plain",charset) msg["Subject"] = Header(subject,charset) msg["From"] = from_address msg["To"] = to_address msg["Cc"] = cc_address msg["Date"] = formatdate(localtime=True) ## メールサーバの指定 smtp = smtplib.SMTP(mailsv) ## メールの送信 smtp.sendmail(from_address,[to_address,cc_address],msg.as_string()) smtp.close() # CSV 1行分の処理終わり。以下最終行までぶんまわし前のはさらにawkなんかでぶん回す必要があったけど、これは、スクリプト内で、csvファイルの読み込み処理までするので、
/path/to/mailsend.py CSV-filenameのみで良い。 作業がスマートになった。 ちなみに、CSVは、
宛先メールアドレス,名前1,名前2,値1,値2,値1,値2,値1,値2,・・・なんていう行も適切に処理できるようになった。
Pythonで差し込みメール送信
やってみた。
mailsend.py
#!/usr/bin/env python #coding: utf-8 import sys import smtplib from email.MIMEText import MIMEText from email.Header import Header from email.Utils import formatdate argvs = sys.argv if __name__ == "__main__": from_address = "送信元メールアドレス" to_address = unicode(argvs[1], "utf-8") cc_address = "送信先メールアドレス" to_name1 = unicode(argvs[2], "utf-8") to_name2 = unicode(argvs[3], "utf-8") atai1 = unicode(argvs[4], "utf-8") atai2 = unicode(argvs[5], "utf-8") charset = "ISO-2022-JP" subject = u"メール件名です。" text = to_name1 + u''' ''' + to_name2 + u''' 様 文章です。 改行も可能です。 ''' + atai1 + u'''\t''' + atai2 + u''' 複数の差し込みも可能です。''' msg = MIMEText(text.encode(charset),"plain",charset) msg["Subject"] = Header(subject,charset) msg["From"] = from_address msg["To"] = to_address msg["Cc"] = cc_address msg["Date"] = formatdate(localtime=True) smtp = smtplib.SMTP("メールサーバアドレス") smtp.sendmail(from_address,[to_address,cc_address],msg.as_string()) smtp.close()こんな感じ。今回は、宛名を2つに分ける必要があったため、2つ付いているだけ。 途中の差し込みリストもさらに2つほど渡してやりたかった。
送信リスト
メールアドレス,名前1,名前2,値1,値2 メールアドレス,名前1,名前2,値1,値2 メールアドレス,名前1,名前2,値1,値2 ・・・
コマンド実行
awk -F"," '{ print "./mailsend.py",$1,$2,$3,$4,$5 }' | /bin/bashこんな感じ
2012年3月8日木曜日
apt-get upgrade時のメール送信について
$ cat /etc/apt/listchanges.conf [apt] frontend=pager email_address=root confirm=0 save_seen=/var/lib/apt/listchanges.db which=newsこの中の「confirm」が「1」になっていると、確認ダイアログが表示されて「email_address」宛にメール送信される。
2011年7月11日月曜日
Shell Script で環境変数を設定する方法
コマンドを使用する。
たとえば、
#!/bin/sh export LANG=ja_JP.utf-8というスクリプト「a.sh」があるとすると、
$ source ./a.shで反映される。
登録:
投稿 (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 を参照。 ファイルハンドルとは、オープンしているサーバ上のファイルを指し示すためにクライアント側が持っている識別子のことです。 その識別子が指し示しているファイルがサーバ上で無くなってしまったり、アクセスできなかったりした...
-
※MAC-VLAN登録変更の際に必要な場合があるため 1. 認証されているスイッチを確認 $ grep xxxxxxxxxxxx /var/log/radius/radius.log Mon Feb 21 14:05:58 2011 : Auth: Login OK: [xxx...
-
前 のは処理がスマートでないのと、値1、値2を複数埋め込む必要があったのとで、改良 mailsend.py #!/usr/bin/env python #coding: utf-8 # CSVからメール送信スクリプト # Ver 1.5 わたり 2013.07.09 # 使い...