免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 35291 | 回复: 2

[其他] 求一个定时ping多个IP不通时候发送邮件恢复时再发送邮件的脚本 [复制链接]

论坛徽章:
0
发表于 2019-04-25 10:24 |显示全部楼层
需求:有10个公网IP,定时做ping检测,如果不通发送一封报警邮件,恢复时再发送一封邮件。
我写的脚本如下:
#!/bin/bash
NOW=`date +%F" "%T`
IP_LIST="123.23.32.9 123.23.35.24"

for IP in $IP_LIST; do
     if ping -i 0.1 -c 50 $IP >/dev/null;then
        echo -e " $IP Ping Is Successful!"
    else
        echo -e "$IP Ping 检测失败,故障时间:$NOW"|mail -s "$IP Ping 检测报警--异常通知!!" XXX@XXX.com
    fi
done

这个只能是不通的时候发送邮件,会有很多封邮件,恢复的时候不发送邮件。
我想修改成不通的时候发送一封邮件,恢复的时候再发送一封邮件,不通期间不再发送邮件。
求大神帮忙完善,谢谢!!



论坛徽章:
0
发表于 2019-04-29 15:27 |显示全部楼层
在网上找到这样一个脚本:

#!/bin/bash
IP="1.2.4.8"
LOG=/root/ping.log

b=0    #初始赋值为0,刚启动脚本时测试到网络正常则不提示,解决每次启动脚本时都提示网络正常的问题(设置为其他值则每次启动脚本时都提示)。
while [ true ]
do
    ping -i 0.1 -c 50 $IP >/dev/null
    a=$?
    if [ $a -ne 0 ]    #判断执行上面ping命令是否正常,为0则网络正常,否则提示网络中断。
       then
            if [ $a -ne $b ]    #解决网络中断时一直提示的问题。
            then
                 b=$a    #给予下次判断网络是否正常。
                 echo -e "$IP Ping检测失败,异常时间:`date +%F" "%T` " >> $LOG
                 tail -1 "$LOG" | mail -s "$IP Is Down!!" XXX@XXX.com
            fi
       else
            if [ $a -ne $b ]    #解决网络正常时一直提示的问题。
            then
                 b=$a    #给予下次判断网络是否正常。
                 echo -e "$IP已恢复正常,恢复时间:`date +%F" "%T` " >> $LOG
                 tail -1 "$LOG" | mail -s "$IP Is Up!!" XXX@XXX.com
            fi
    fi
done

后台运行这个脚本可以实时检测一个IP的状态,改了半天都不能实现多个IP的检测,只能每个IP用一个这样的脚本,然后后台运行。IP少了还好,太多了就很不方便!
如何才能实现一个脚本同时检测多个IP?
求大神赐教!!!

论坛徽章:
0
发表于 2019-05-10 17:09 |显示全部楼层
第一种办法加一个ip列表for循环检测,但是这样的问题是ip多了,同时检测有个时间周期的问题
#!/bin/bash
IP="
1.2.4.8
1.2.4.9
"
LOG=/root/ping.log

b=0    #初始赋值为0,刚启动脚本时测试到网络正常则不提示,解决每次启动脚本时都提示网络正常的问题(设置为其他值则每次启动脚本时都提示)。
while [ true ]
do
    for iplist in $IP
    do
        ping -i 0.1 -c 50 $iplist >/dev/null
        a=$?
        if [ $a -ne 0 ]    #判断执行上面ping命令是否正常,为0则网络正常,否则提示网络中断。
        then
            if [ $a -ne $b ]    #解决网络中断时一直提示的问题。
            then
                 b=$a    #给予下次判断网络是否正常。
                 echo -e "$iplist Ping检测失败,异常时间:`date +%F" "%T` " >> $LOG
                 tail -1 "$LOG" | mail -s "$iplist Is Down!!" XXX@XXX.com
            fi
        else
            if [ $a -ne $b ]    #解决网络正常时一直提示的问题。
            then
                 b=$a    #给予下次判断网络是否正常。
                 echo -e "$IP已恢复正常,恢复时间:`date +%F" "%T` " >> $LOG
                 tail -1 "$LOG" | mail -s "$iplist Is Up!!" XXX@XXX.com
            fi
        fi
    done
done
#-------------------------------------------------------------------------
第二种办法,要检测的ip作为参数传入脚本,这样脚本只用一个,可以启动n个进程去独立执行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP