Shell指令碼實現檢測某ip網路暢通情況(含簡訊警示功能)_linux shell

來源:互聯網
上載者:User

花了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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.