Shell脚本Ping监控主机是否存活并发邮件报警(三种方法)
#前提已经可以通过mail或mutt客户端发邮件
1.先安装sendmail来发邮件
1
2
3
|
# yum -y install sendmail
# /etc/init.d/sendmail start
# chkconfig sendmail on
|
2.再安装邮件客户端
1
|
# yum -y install mutt
|
2.1 为了更好在邮件中显示,设置mutt客户端发送信息
1
2
3
4
5
6
7
|
# vim /etc/Muttrc
set charset= "utf-8" #设置发邮件编码
set envelope_from= yes
set rfc2047_parameters= yes #解决附件乱码问题
set realname= "报警" #发件人别名
set use_from= yes #指定是否显示别名
|
方法1、通过加失败计数器来判断(误报率低)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/bin/bash DATE=` date +%F " " %H:%M`
IP= /root/monitor/ip .txt #ip地址表
for ip in $( cat $IP | sed '/^#/d' )
do for ((i=1;i<=3;i++))
do
ping -c 1 $ip &> /dev/null
[ $? - ne 0 ] && let FailCount+=1;
done
done [ -z $FailCount ] && FailCount=0 #当ping都正常时,FailCount值为空,就设置FailCount值为0,用整数比较
if [ $FailCount - eq 2 ]; then
#echo "$IP ping is failed."
echo -e "Date : $DATE\nHost : $ip\nProblem : Ping is failed, Please check ! ! !" | mutt -s "Ping Monitor" $MAIL
fi |
#添加任务计划
# crontab -e
*/1 * * * * /root/monitor/ping.sh
1
|
done |
方法二、通过ping一个包的状态判断(误报率低,建议此方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/bin/bash for ip in $( cat ip_list| sed "/^#/d" ) #ip_list是当前目录下IP表
do
ping -c 1 $ip &> /dev/null #三个ping有一个能通,说明服务器正常
a=$?
sleep 2
ping -c 1 $ip &> /dev/null
b=$?
sleep 2
ping -c 1 $ip &> /dev/null
c=$?
sleep 2
DATE=$( date +%F " " %H:%M)
if [ $a - ne 0 -a $b - ne 0 -a $c - ne 0 ]; then
echo -e "Date : $DATE\nHost : $ip\nProblem : Ping is failed." | mail -s "Ping $ip failed From 255.252" $MAIL
#else
# echo "$ip ping is successful."
fi
done |
方法三、通过丢包率来判断是否正常(误报率高)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/bin/bash while true
do DATE=` date +%F " " %H:%M`
for ip in $( cat ip_list| sed "/^#/d" ) #ip_list是当前目录下IP表
do
num=$( ping -c 2 $ip | grep "100% packet loss" | wc -l)
if [ $num == 1 ]; then
echo -e "Date : $DATE\nHost : $i\nProblem : Ping is failed." | mail -s "Ping $i failed From 255.252" $MAIL
fi
done
sleep 30
done
|