Shell腳本實現檢測某ip網絡暢通情況,實戰用例


Shell腳本實現檢測某ip網絡暢通情況,實戰用例

環境准備,linux shell 發送email 郵件:
1.安裝sendmail
yum -y install sendmail
安裝好sendmail以后執行以下命令啟動sendmail
/etc/init.d/sendmail start
Starting sendmail: [ OK ]
Starting sm-client: [ OK ]
啟動以后我們可以執行mail命令測試一下是否能發送郵件
一、通過文件內容發送郵件
mail -s 'Test mail' xxx@xxx.com < /etc/passwd

2.使用管道符發送郵件內容,安裝mailx
yum install mailx -y

3.安裝mutt
yum install mutt
echo -e "服務器異常,請檢查" | mutt -s "xxx告警" xxx@xxx.com

郵件一般會被當成垃圾郵件,需要到垃圾箱里面查看,設置為不是垃圾郵件,或者添加白名單(由於不是正常郵箱格式,QQ郵箱添加不了白名單)

------------------------------
sendmail: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
Error sending message, child exited 127 (Exec error.).
Could not send the message.

============================================

 1 #!/bin/bash
 2 ####################################################################################
 3 #本腳本放於異機,使用定時任務檢測192.168.1.12是否網絡暢通,如果不通則發郵件告警  
 4 #為防止頻繁收到郵件,對發送郵件做了如下限制:                                      
 5 #一小時內只發前三條告警郵件,也就是如果網絡一直不通,則每小時內只發前三條郵件。    
 6 #本腳本只能檢測一個ip是否網絡斷開,可在開始部分加個循環,檢測多個ip                
 7 ####################################################################################
 8 #初始化環境變量
 9 source /root/.bash_profile
10 #郵件發送列表
11 mail_list='135xxxxxxxx@xx.com,xxx@xxx.com'
12 #ping三次檢測的ip
13 ping=`ping -c 3 192.168.1.12|awk 'NR==7 {print $4}'`
14 #如果三次均沒ping通,則做以下操作,ping不通可能返回為空,單個[]會報錯-eq: unary operator expected,要用雙重的 [ ]
15 if [[ $ping -eq 0 ]]
16 then
17   #檢查mailinfo文件是否存在,不存在則建立
18   if [ ! -e ./mailinfo ]
19   then
20   touch ./mailinfo
21   fi
22   #獲取當前主機時間,用於郵件正文的時間顯示
23   now_time=`date`
24   #檢查./mailinfo的行數是否為空,如果為空則直接發送郵件
25   row_num=`wc -l ./mailinfo | cut -c 1`
26   if [ $row_num -eq 0 ]
27     then
28     echo "發郵件"
29     echo -e "1.12網絡已斷開,請檢查 \n\n 告警時間:$now_time" | mutt -s "1.12告警" $mail_list
30     #更新最后一次發送時間
31     date +%Y%m%d-%H%M > ./mailinfo
32     echo 1 >> ./mailinfo
33   #如果mailinfo內容不為空,則判斷(當前時間減1小時)是否大於上次發送時間,如果是則發郵件
34   else
35     #獲取上次發郵件的日期和時間
36     last_date=`head -1 ./mailinfo | cut -c 1-8`
37     last_time=`head -1 ./mailinfo | cut -c 10-13`
38     #獲取1小時前的日期和時間
39     current_date=`date +%Y%m%d`
40     current_time=`date +%H%M`
41     #計算當前時間和上次時間差距多久,加10#是為了防止0開頭的字符被當成8進制計算
42     let time_diff=10#$current_time-10#$last_time
43     #獲取發送次數
44     send_times=`tail -1 ./mailinfo`
45       #以下四種情況發郵件:
46       #當前日期>上次日期,可以發,然后發送計數send_times置為1
47       if [ "$current_date" -gt "$last_date" ]
48         then
49         echo "發郵件"
50         echo -e "1.12網絡已斷開,請檢查 \n\n 告警時間:$now_time" | mutt -s "1.12告警" $mail_list
51         #更新最后一次發送時間
52         date +%Y%m%d-%H%M > ./mailinfo
53         echo 1 >> ./mailinfo
54       fi
55       #當前日期等於上次日期 and 本次時間大於上次時間1小時外,可以發,然后發送計數send_times置為1
56       if [ "$current_date" -eq "$last_date" -a $time_diff -ge 100 ]
57         then
58         echo "發郵件"
59         echo -e "1.12網絡已斷開,請檢查 \n\n 告警時間:$now_time" | mutt -s "1.12告警" $mail_list
60         #更新最后一次發送時間
61         date +%Y%m%d-%H%M > ./mailinfo
62         echo 1 >> ./mailinfo
63       fi
64       #當前日期等於上次日期 and 發送計數send_times置為1,可以發,然后發送次數加1
65       if [ "$current_date" -eq "$last_date" -a $send_times -eq 1 ]
66         then
67         echo "發郵件"
68         echo -e "1.12網絡已斷開,請檢查 \n\n 告警時間:$now_time" | mutt -s "1.12告警" $mail_list
69         #更新最后一次發送時間
70         date +%Y%m%d-%H%M > ./mailinfo
71         echo 2 >> ./mailinfo
72       fi
73       #當前日期等於上次日期 and 發送計數send_times置為2,可以發,然后發送次數加1
74       if [ "$current_date" -eq "$last_date" -a $send_times -eq 2 ]
75         then
76         echo "發郵件"
77         echo -e "1.12網絡已斷開,請檢查 \n\n 告警時間:$now_time" | mutt -s "1.12告警" $mail_list
78         #更新最后一次發送時間
79         date +%Y%m%d-%H%M > ./mailinfo
80         echo 3 >> ./mailinfo
81       fi
82   fi
83 fi

 

===============================
cd /home
mkdir shell
cd /home/shell/
復制上面內容到服務器上創建文件粘帖(window下保存的文件有編碼問題)
vim checkserver.sh
從服務器編輯后sz下載的修改后可以直接上傳,復制粘帖反而會成為一行,沒有換行了。

-------------------------
增加執行權限
chmod +x checkserver.sh
-------------------------
測試腳本執行情況,可以先在文件頭部加個echo信息,或者把IP改成ping不通的
./checkserver.sh
-------------------------
用crontab每5分鍾執行一次
crontab -e
*/5 * * * * /home/shell/checkserver.sh

"/tmp/crontab.QIbyUa" 1L, 39C written
crontab: installing new crontab

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM