標籤:
http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html
#!/bin/bash# 指令碼檢測到離線主機會發送郵件通知,可一直運行。# 請根據你的需要設定 Mail gatewany ip lastip 四項 其餘不用設定Mail[email protected]163.com #警示郵件接收地址gateway=192.168.1.253 #內網網關ip 測試內網是否正常outipaddr=202.96.134.134 #外網ip 測試外網是否正常ip="192.168.1."lastip=(142210211212220221222) #需要監控的主機列表 可以繼續添加142 210 211 212 220 221 222unlastip=() #不線上主機列表length=${#lastip[@]} #unlength=${#unlastip[@]}echo "一共有$length個伺服器在檢測"ps () { #ping 線上主機列表ping $ip$1 -c 1 -w 2 |grep -q "ttl" #最多ping2次 時間2秒內 2秒實測ping2次 ping不通2秒自動停止if [ $? -eq 0 ];then ### echo "ping $ip$1 pass" ###通 else ### 不通 ping $gateway -c 1 -w 2 |grep -q "ttl" #本機ping網關 測試目的:防止本機脫離區域網路 if [ $? -eq 0 ];then ## 內網通 echo "ping $ip$1 lost" ping $outipaddr -c 2 -w 2 |grep -q "ttl" #本機ping外網 if [ $? -eq 0 ];then # 外網通 刪除離線主機 並進行郵件通知 echo "當前不通被刪除的ip為:$1"# echo "添加前unlastip數組值為:${unlastip[@]}"# echo "進行添加" unlastip=(${unlastip[@]} $1) # 把離線主機添加到離線列表中# echo "添加成功" unset lastip[i] #從數組中刪除離線ip 不過echo lastip[i]的值為空白 需要做以下操作 echo "當前離線主機列表:${unlastip[@]}" m=${lastip[@]} lastip=($m) #刪除後剩餘數組內容重新賦值給數組 echo "當前線上主機列表:${lastip[@]}" length=${#lastip[@]} # unlength=${#unlastip[@]} # # fi echo `date`|mail -s "$ip$1 lost" $Mail ##發寄件提醒斷網時間 echo "******************* mail sent ************************" else # 發送不成功 echo "sent mail failed,please check" fi # else ## 內網不通 echo "can‘t reach the gateway ,please check inet " # continue fi ##fi ###}pu () { #ping離線主機列表ping $ip$1 -c 1 -w 2 |grep -q "ttl" #最多ping2次 時間2秒內 2秒實測ping2次 ping不通2秒自動停止if [ $? -eq 0 ];then ### 列表中為不通的ip 這裡判斷是否又通了 echo "進行添加" lastip=(${lastip[@]} $1) echo "添加成功" unset unlastip[j] #從數組中刪除原數 echo "當前線上主機列表:${lastip[@]}" m=${unlastip[@]} unlastip=($m) #刪除後剩餘數組內容重新賦值給數組 echo "當前不線上主機列表${unlastip[@]}" unlength=${#unlastip[@]} # length=${#lastip[@]} #fi}while :;do # 死迴圈#改進後迴圈,unset${lastip[i]}刪除數組中ping不通的ip if (($length>0));then # 線上主機列表非空就檢查列表中主機是否真的線上,如果不線上 ps函數將會把離線主機踢出線上列表 for ((i=0;i<$length;i++));do#echo ${lastip[i]} ps ${lastip[i]}#exit done fi#改進前的迴圈,無法刪除數組原數#for i in ${lastip[*]};do # 迴圈ip列表#ps $i # $i就是ps裡面的$1#echo "sum:"$sum#done#echo $unlengthsleep 1#echo "ps over and pu start" if (($unlength>0));then # 有離線主機就開始檢查離線主機是否恢複線上,pu函數將對恢複線上的主機添加到線上主機列表中 for ((j=0;j<$unlength;j++));do pu ${unlastip[j]} done fi# echo "pu over and ps start" echo "當前線上主機列表:${lastip[@]}" echo "當前不線上主機列表${unlastip[@]}"done
數組 bash shell