|
#!/bin/bash
LANG=C
#邮件地址设置
fromaddress="obs01@test.com.cn" #From地址
toaddress="xjkong@test.com.cn" #发送地址
ccaddress="mymon@test.com.cn" #抄送地址
#邮件报警从复次数
remun=2
#被监控服务器、端口列表
server_all_list=(\
192.168.70.25:2004 \
192.168.70.24:80 \
192.168.16.56:80 \
)
#################################################################
#采用mail决定发送报警消息。
send_msg()
{
/bin/grep "$server_ip" mun.tmp > /dev/null 2>&1
if [ $? -eq 0 ]
then
mun=$(grep "$server_ip" mun.tmp | awk -F ':' '{print $2}')
if [ $mun -lt $remun ];then
echo "$messages" | mail -c $ccaddress -s "$server_ip is down" $toaddress -- -f $fromaddress
newmun=$[$mun + 1]
/bin/sed -i 's/'$server_ip':'$mun'/'$server_ip':'$newmun'/g' mun.tmp
fi
else
echo "$server_ip:1" >> mun.tmp
echo "$messages" | mail -c $ccaddress -s "$server_ip is down" $toaddress -- -f $fromaddress
# echo "$messages"
# echo "$server_ip"
fi
}
#重置邮件已发送次数记录
reset_mun()
{
/bin/sed -i '/'$server_ip'/d' mun.tmp
echo "server $server_ip online" | mail -c $ccaddress -s "$server_ip server online" $toaddress -- -f $fromaddress
}
###########
server_all_len=${#server_all_list
}
i=0
while [ $i -lt $server_all_len ]
do
server_ip=$(echo ${server_all_list[$i]} | awk -F ':' '{print $1}')
server_port=$(echo ${server_all_list[$i]} | awk -F ':' '{print $2}')
#status: 0,http down 1,http ok 2,http down but ping ok
if nc -vv -z -w 10 $server_ip $server_port > /dev/null 2>&1
then
status=1
messages="server $server_ip,port $server_port can't access!"
else
if ping -c 1 $server_ip > /dev/null 2>&1
then
status=2
messages="server $server_ip,Port $server_port cannot access,but Ping is connected!"
else
status=0
messages="server $server_ip,port $server_port and Ping cannot access!"
fi
fi
if [ $status -eq 1 ];then
grep "$server_ip" mun.tmp > /dev/null 2>&1
if [ $? -eq 0 ];then
reset_mun
fi
else
send_msg
fi
let i++
done
|
|
|