• 追加された行はこの色です。
  • 削除された行はこの色です。
  • Server/Tools/chkalive へ行く。

#contents


*はじめに [#m82bad32]
端末の生死(?)状況を定期的にメールでレポートするツールです。~
pingを送信して、反応が有ればalive、無ければdeadとしています。


*ソースコード [#u599fd7b]
 #!/usr/local/bin/bash
 
 #----------------------------------------------------
 #  Computer Alive Checker (for MultiClients)
 #  Version 0.20
 #  by myasu 2002
 #----------------------------------------------------
 
 #注意
 #  必ずGNUのコマンドを使ってください。
 #  pingの返答結果が "... is alive" "... is dead"のみに対応。
 #  (_SEND_PING関数の書き換えが必要)
 
 #----------------------
 #初期設定
 
 #二重送信防止用フラグの書き込み先ディレクトリ
 DIR_FLUG="./"
 
 #チェック対象となるコンピュータのIPアドレス(最後に必ず"null"を入れること!)
 LIST_IP=( \
 	10.96.101.1 \
 	10.96.101.2 \
 	10.96.101.3 \
 	null
 )
 
 #メールの送信先
 LIST_MAIL="hoge@hogegoge"
 
 #返信先
 RET_MAIL="hoge@hogegoge"
 
 
 #使用するコマンドの設定
 C_NSLOOKUP="/usr/local/bin/dnsname"
 C_PING="/usr/sbin/ping"
 C_DATE="/usr/local/bin/date"
 C_SENDMAIL="/var/qmail/bin/qmail-inject"
 #C_SENDMAIL="/usr/SUNWale/bin/mailx"
 C_TOUCH="/usr/local/bin/touch"
 C_AWK="/usr/local/bin/awk"
 C_RM="/usr/local/bin/rm"
 
 #署名
 SIG_MESSAGE="ChkAlive Ver.0.2"
 
 
 #----------------------
 #関数
 
 #IPアドレスからコンピュータ名を返す
 function _IP_TO_NAME()
 {
 	BUF_NAME=`eval $C_NSLOOKUP $1`
 	return
 }
 
 #Pingを送って、状態を確認
 function _SEND_PING()
 {
 	#ping送信(タイムアウト3秒)
 	STATE=`eval $C_PING $1 3 | $C_AWK '{print $3}'`
     
     #もし alive なら 0 を返す
 	if [ $STATE = "alive" ]; then
 		return 0
 	else
 		return 1
 	fi
 }
 
 #二重送信防止フラグの状態チェック
 function _CHK_FLUG()
 {
 	#フラグが立っていれば 0 を返す
 	if [ -f ${DIR_FLUG}flg_$1 ]; then
 		return 0
 	else
 		return 1
 	fi
 }
 
 #二重送信防止フラグを立てる
 function _MAKE_FLUG()
 {
 	$C_TOUCH ${DIR_FLUG}flg_$1
 }
 
 #二重送信防止フラグを消す
 function _DEL_FLUG()
 {
 	$C_RM ${DIR_FLUG}flg_$1
 }
 
 #停止している旨のメールを送信
 function _SEND_REPORT_DEAD()
 {
 	echo -n "Sending Mail ($1 is dead)... "
 	
 	#本文の作成
 	BUF_DATE=`eval $C_DATE`
 	_IP_TO_NAME $1
 
 	env - $C_SENDMAIL -f${RET_MAIL} << EOF
 To: $LIST_MAIL
 From: ServerRepor <>
 Subject: $BUF_NAME is DEAD!
 
 $BUF_DATE
 $BUF_NAME ($1) is dead!
 
 ---
 $SIG_MESSAGE
 EOF
 
     echo "done"
 
 }
 
 #復帰した旨をメールで送信
 function _SEND_REPORT_ALIVE()
 {
 
 	echo -n "Sending Mail ($1 is alive)... "
 
 	#本文の作成
 	BUF_DATE=`eval $C_DATE`
 	_IP_TO_NAME $1
 
 	env - $C_SENDMAIL -f${RET_MAIL} << EOF
 To: $LIST_MAIL
 From: ServerReport <>
 Subject: $BUF_NAME is alive.
 
 $BUF_DATE
 $BUF_NAME ($1) is alive, thank you!
 
 ---
 $SIG_MESSAGE
 EOF
 
     echo ""
 
 }
 
 
 #----------------------
 #メイン処理
 
 i=0
 
 while [ ${LIST_IP[i]} != "null" ]
 do
 
   echo -n "Checking[${LIST_IP[i]}]..."
   
   #ping送信
   _SEND_PING ${LIST_IP[i]}
   if [ $? -ne 0 ]; then
 
 	  #deadなら
 	  echo "[dead] "
 
 	  #フラグが立っているかチェック
 	  _CHK_FLUG ${LIST_IP[i]}
 	  if [ $? -ne 0 ]; then
 		  #フラグが立ってなければ
 		  #停止している旨をメールで通知
 		  _SEND_REPORT_DEAD ${LIST_IP[i]}
 		  #フラグを立てる
 		  _MAKE_FLUG ${LIST_IP[i]}
 	  fi
 
   else
 
 	  #aliveなら
 	  echo "[alive] "
 
 	  #フラグが立っているかチェック
 	  _CHK_FLUG ${LIST_IP[i]}
 	  if [ $? -eq 0 ]; then
 		  #フラグが立っていれば
 		  #復帰した旨をメールで通知
 		  _SEND_REPORT_ALIVE ${LIST_IP[i]}
 		  #フラグを削除
 		  _DEL_FLUG ${LIST_IP[i]}
 	  fi
   fi
 
   #echo "done"
 
   i=$(($i+1))
 done
  
*説明 [#ga197188]
**設定箇所 [#sd65029e]
-''LIST_IP''に、監視する端末のIPアドレスを列挙します。
-''LIST_MAIL''に、レポートの送信先アドレスを指定します。
-''RET_MAIL''に、返信先アドレスを指定します。返信しても動作に全く影響有りません。


**設定箇所(レポート内容) [#b33b9493]
''_SEND_REPORT_ALIVE''と''_SEND_REPORT_ALIVE''関数に、それぞれメール本文が入っています。
	env - $C_SENDMAIL -f${RET_MAIL} << EOF
 To: $LIST_MAIL
 From: ServerRepor <>
 Subject: $BUF_NAME is DEAD!
 
 $BUF_DATE
 $BUF_NAME ($1) is dead!
 
 ---
 $SIG_MESSAGE
 EOF

''$BUF_DATE''は現在の日時、''$BUF_NAME''は端末の名前(ここではdnsnameを用いてIPアドレスから自動的に逆引きした名前が入っています)、$1にはIPアドレスが格納されていますので、適当に本文のフォーマットを書き換えてください。

RIGHT:2008-09-14 (日) 09:30:31
----
[[Solaris Administrator]]
トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS