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アドレス(最後に必ず...
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''は端末の名前(こ...
RIGHT:2008-09-14 (日) 09:30:31
----
[[Solaris Administrator]]
終了行:
#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アドレス(最後に必ず...
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''は端末の名前(こ...
RIGHT:2008-09-14 (日) 09:30:31
----
[[Solaris Administrator]]
ページ名: