Shell脚本Ping监控主机是否存活并发邮件报警(三种方法)

释放双眼,带上耳机,听听看~!

前提已经可以通过mail或mutt客户端发邮件

1. 先安装sendmail来发邮件

# yum -y install sendmail
# /etc/init.d/sendmail start
# chkconfig sendmail on

2.再安装邮件客户端

首先下载最新版本mailx-12.4.tar.bz2

wget http://sourceforge.net/projects/heirloom/files/latest/download?source=files

解压包:


1
2
3
4
5
1# tar jxvf mailx-12.4.tar.bz2
2# cd mailx-12.4
3# make
4# make install UCBINSTALL=/usr/bin/install
5

注意:如果没有卸载旧版本的mailx,是不能直接使用mailx或mail命令的,否则使用的仍然是旧版mailx。

查看版本号:


1
2
1#/root/mailx-12.4/mailx  -V
2

写入.bashrc


1
2
3
4
1# vi /root/.bashrc
2添加一行:alias mail='/root/mailx-12.4/mailx'
3# source /root/.bashrc
4

这时再执行mail命令即代表新版mailx。 

接下来配置新版mailx使用外部邮箱发送邮件:

编辑/etc/nail.rc(注意不是旧版的/etc/mail.rc):


1
2
3
4
5
6
1vi /etc/nail.rc  添加两行:
2
3set from=myname@163.com smtp=smtp.163.com
4
5set smtp-auth-user=myname smtp-auth-password=password smtp-auth=login
6

第一行指明所使用的外部邮箱及smtp服务器

第二行指明外部邮箱使用的用户名和密码。
这里我用的是163邮箱要开启POP3/SMTP服务IMAP/SMTP服务开启后会让你输入授权码,授权码就是这里需要指定的密码
保存,并重启sendmail服务


1
2
1#service sendmail restart
2

如果执行报错:


1
2
1sendmail: unrecognized service
2

是因为没有安装sendmail,通过yum安装上就ok


1
2
1yum install sendmail
2

安装成功,继续执行重启sendmail服务步骤

sendmail启动成功后怎么使用呢?


1
2
3
4
5
6
7
1#echo 'Tset ' | mailx -s "Test test" jieshouren@163.com
2#echo -e "中文内容测试! " | /root/mailx-12.4/mailx -s "中文标题"  jieshouren@qq.com
3#echo 'Tset ' 表示内容
4#-s  "Test test" 表示标题
5#也可以打印整个文件内容
6#cat /home/Tset.log | mailx -s "Test test" jieshouren@163.com
7

方法一、通过加失败计数器来判断(误报率低)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1#!/bin/bash
2DATE=`date +%F" "%H:%M`
3IP=/root/monitor/ip.txt     #ip地址表
4MAIL=zhenliang369@163.com
5for ip in $(cat $IP | sed '/^#/d')
6do
7    for ((i=1;i<=3;i++))
8    do
9        ping -c 1 $ip &>/dev/null
10    [ $? -ne 0 ] && let FailCount+=1;
11    done
12done
13[ -z $FailCount ] && FailCount=0  #当ping都正常时,FailCount值为空,就设置FailCount值为0,用整数比较
14if [ $FailCount -eq 2 ];then
15    #echo "$IP ping is failed."
16    echo -e "Date : $DATE\nHost : $ip\nProblem : Ping is failed, Please check ! ! !" | mailx -s "Ping Monitor" $MAIL
17fi
18
19

#添加任务计划


1
2
3
1# crontab -e
2*/1 * * * * /root/monitor/ping.sh
3

方法二、通过ping一个包的状态判断(误报率低,建议此方法)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1#!/bin/bash
2MAIL="baojingtongzhi@163.com huangxiaohong@loongtao.com"
3for ip in $(cat ip_list|sed "/^#/d")    #ip_list是当前目录下IP表
4  do
5     ping -c 1 $ip &>/dev/null            #三个ping有一个能通,说明服务器正常
6     a=$?
7     sleep 2
8     ping -c 1 $ip &>/dev/null
9     b=$?
10     sleep 2
11     ping -c 1 $ip &>/dev/null
12     c=$?
13     sleep 2
14     DATE=$(date +%F" "%H:%M)
15     if [ $a -ne 0 -a $b -ne 0 -a $c -ne 0 ];then
16         echo -e "Date : $DATE\nHost : $ip\nProblem : Ping is failed." | mailx -s "Ping $ip failed From 255.252" $MAIL
17     #else
18     #    echo "$ip ping is successful."
19     fi
20done
21

方法三、通过丢包率来判断是否正常(误报率高)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1#!/bin/bash
2while true
3do
4    DATE=`date +%F" "%H:%M`
5    MAIL="zhenliang369@163.com"
6  for ip in $(cat ip_list|sed "/^#/d")       #ip_list是当前目录下IP表
7  do
8     num=$(ping -c 2 $ip |grep "100% packet loss" |wc -l)    
9     if [ $num == 1 ];then
10        echo -e "Date : $DATE\nHost : $i\nProblem : Ping is failed." | mailx -s "Ping $i failed From 255.252" $MAIL
11     fi
12  done
13sleep 30
14done
15

给TA打赏
共{{data.count}}人
人已打赏
安全技术安全运维

Windows服务器如何发现被黑

2018-5-20 12:24:31

安全技术

详解Node.js API系列 Http模块(1) 构造一个简单的静态页服务器

2021-12-21 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索