Shell脚本实现检测某ip网络畅通情况(含短信报警功能)

 更新时间:2014年12月21日 14:44:57   投稿:junjie  
这篇文章主要介绍了Shell脚本实现检测某ip网络畅通情况(含短信报警功能),本文脚本针对一个服务器IP进行检查,也可改造一下,执行个多个IP的检查,需要的朋友可以参考下

花了1天的时间写了一个检测某ip是否网络畅通的脚本,只检测网络是否畅通的功能很容易实现,但加了一些限制功能却不好实现。

复制代码 代码如下:

#!/bin/bash
####################################################################################
#本脚本放于异机,使用定时任务检测192.168.10.231是否网络畅通,如果不通则发短信告警 
#为防止频繁收到短信,对发送短信做了如下限制:                                     
#一小时内只发前三条告警短信,也就是如果网络一直不通,则每小时内只发前三条短信。   
#本脚本只能检测一个ip是否网络断开,可在开始部分加个循环,检测多个ip               
####################################################################################
#初始化环境变量
source /root/.bash_profile
#邮件发送列表
mail_list='135xxxxxxxx@139.com,zhangwz@xx.net'
#ping三次检测的ip
ping=`ping -c 3 192.168.1.69|awk 'NR==7 {print $4}'`
#如果三次均没ping通,则做以下操作
if [ $ping -eq 0 ]
then
  #检查mailinfo文件是否存在,不存在则建立
  if [ ! -e ./mailinfo ]
  then
  touch ./mailinfo
  fi
  #获取当前主机时间,用于邮件正文的时间显示
  now_time=`date`
  #检查./mailinfo的行数是否为空,如果为空则直接发送邮件
  row_num=`wc -l ./mailinfo | cut -c 1`
  if [ $row_num -eq 0 ]
    then
    echo "发邮件"
    echo -e "1.69网络已断开,请检查 \n\n 告警时间:$now_time" | mutt -s "1.69告警" $mail_list
    #更新最后一次发送时间
    date +%Y%m%d-%H%M > ./mailinfo
    echo 1 >> ./mailinfo
  #如果mailinfo内容不为空,则判断(当前时间减1小时)是否大于上次发送时间,如果是则发邮件
  else
    #获取上次发邮件的日期和时间
    last_date=`head -1 ./mailinfo | cut -c 1-8`
    last_time=`head -1 ./mailinfo | cut -c 10-13`
    #获取1小时前的日期和时间
    current_date=`date +%Y%m%d`
    current_time=`date +%H%M`
    #计算当前时间和上次时间差距多久,加10#是为了防止0开头的字符被当成8进制计算
    let time_diff=10#$current_time-10#$last_time
    #获取发送次数
    send_times=`tail -1 ./mailinfo`
      #以下四种情况发邮件:
      #当前日期>上次日期,可以发,然后发送计数send_times置为1
      if [ "$current_date" -gt "$last_date" ]
        then
        echo "发邮件"
        echo -e "1.69网络已断开,请检查 \n\n 告警时间:$now_time" | mutt -s "1.69告警" $mail_list
        #更新最后一次发送时间
        date +%Y%m%d-%H%M > ./mailinfo
        echo 1 >> ./mailinfo
      fi
      #当前日期等于上次日期 and 本次时间大于上次时间1小时外,可以发,然后发送计数send_times置为1
      if [ "$current_date" -eq "$last_date" -a $time_diff -ge 100 ]
        then
        echo "发邮件"
        echo -e "1.69网络已断开,请检查 \n\n 告警时间:$now_time" | mutt -s "1.69告警" $mail_list
        #更新最后一次发送时间
        date +%Y%m%d-%H%M > ./mailinfo
        echo 1 >> ./mailinfo
      fi
      #当前日期等于上次日期 and 发送计数send_times置为1,可以发,然后发送次数加1
      if [ "$current_date" -eq "$last_date" -a $send_times -eq 1 ]
        then
        echo "发邮件"
        echo -e "1.69网络已断开,请检查 \n\n 告警时间:$now_time" | mutt -s "1.69告警" $mail_list
        #更新最后一次发送时间
        date +%Y%m%d-%H%M > ./mailinfo
        echo 2 >> ./mailinfo
      fi
      #当前日期等于上次日期 and 发送计数send_times置为2,可以发,然后发送次数加1
      if [ "$current_date" -eq "$last_date" -a $send_times -eq 2 ]
        then
        echo "发邮件"
        echo -e "1.69网络已断开,请检查 \n\n 告警时间:$now_time" | mutt -s "1.69告警" $mail_list
        #更新最后一次发送时间
        date +%Y%m%d-%H%M > ./mailinfo
        echo 3 >> ./mailinfo
      fi
  fi
fi

相关文章

  • Linux Shell脚本编程初体验

    Linux Shell脚本编程初体验

    脚本语言是与计算机交流的另外一种途径。使用图形化窗口界面用户可以移动鼠标并点击各种对象,比如按钮、列表、选框等等。但这种方式在每次用户想要计算机/服务器完成相同任务时却是十分不方便。要想让所有这些事情变得简单并且自动化,我们可以使用shell脚本
    2015-08-08
  • shell的比较运算介绍

    shell的比较运算介绍

    shell中的比较运算介绍,想学习linux shell编程的朋友可以参考下
    2013-01-01
  • 详解TCP的四种定时器

    详解TCP的四种定时器

    这篇文章主要介绍了详解TCP的四种定时器的相关资料,需要的朋友可以参考下
    2017-07-07
  • 一个监控Squid运行进程数并自动重启的简洁Shell脚本分享

    一个监控Squid运行进程数并自动重启的简洁Shell脚本分享

    这篇文章主要介绍了一个监控Squid运行进程数并自动重启的简洁Shell脚本分享,本文直接给出实现代码,需要的朋友可以参考下
    2014-12-12
  • Linux 字段连接 join 命令使用小结

    Linux 字段连接 join 命令使用小结

    join命令是Linux系统中的一个文本处理工具,它用于将两个文件的行按照共同的字段连接起来,这篇文章主要介绍了Linux字段连接join命令使用指南,需要的朋友可以参考下
    2023-06-06
  • shell进度条追踪指令执行时间的场景分析

    shell进度条追踪指令执行时间的场景分析

    这篇文章主要介绍了shell进度条如何追踪指令执行时间,本文中的进度条可以应用于大部分场景。不用修改进度条函数的任何代码,就可以直接使用,特别适合那些可预估指令执行时间的场景,需要的朋友可以参考下
    2022-06-06
  • 使用crontab每隔1分钟执行一个命令行脚本

    使用crontab每隔1分钟执行一个命令行脚本

    这篇文章主要介绍了使用crontab每隔1分钟执行一个命令行脚本,文末介绍了crontab中如何设置每30秒执行一次任务,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Shell中使用grep、sed正则提取和替换字符串

    Shell中使用grep、sed正则提取和替换字符串

    这篇文章主要介绍了Shell中使用grep、sed正则提取和替换字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Shell脚本实现批量生成nagios配置文件

    Shell脚本实现批量生成nagios配置文件

    这篇文章主要介绍了Shell脚本实现批量生成nagios配置文件,本文使用配置文件模板加上文件替换的方法实现批量生成配置文件,需要的朋友可以参考下
    2015-07-07
  • 每天一个linux命令 head命令

    每天一个linux命令 head命令

    这篇文章主要为大家详细介绍了一个linux命令:head命令,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02

最新评论