2012-01-18 106 views
1

我需要幫助來更新此腳本,如果ping失敗它會發送另一個ping到另一個主機(除了現在發送的電子郵件,如果ping失敗)。 如何從這個腳本完成?腳本電子郵件警報和ping

#!/bin/bash 

HOSTS="IP ADRESS" 
COUNT=4 

for myHost in $HOSTS 
do 
    count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | a$ 
    if [ $count -eq 0 ]; then 
     # 100% failed 
     echo "Server failed at $(date)" | mail -s "Server Down" [email protected] 
     echo "Host : $myHost is down (ping failed) at $(date)" 
    fi 
done 
+0

這裏有什麼問題?如果兩個都失敗了,你想要發送郵件嗎? – Sorin 2012-01-18 23:15:29

+0

@Sorin。如果IP1出現故障,我喜歡收到一封郵件,然後我想到IP2會ping一個<並啓動wol>。我相信這不起作用,因爲它需要使用wakeonlan + MAC,而不僅僅是ping。或者這可以通過ping來完成?因此,如果需要使用wakonland命令:IP1無法收到郵件 - IP2會收到「wakonlan 1:2:3:4:5:6」並啓動。只需要獲得郵件,如果IP1失敗... – 2012-01-19 13:59:17

回答

-3

用數組試試這個:

#!/bin/bash 
HOSTS_ARRAY=("IP_ADRESS" "ANOTHER_IP" "YET_ANOTHER") 
COUNT=4 
for myHost in "${HOSTS_ARRAY[@]}" 
do 
    count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | a$ 
    if [ $count -eq 0 ]; then 
     # 100% failed 
     echo "Server failed at $(date)" | mail -s "Server Down" [email protected] 
     echo "Host : $myHost is down (ping failed) at $(date)" 
    fi 
done 
+0

@ZsoitBotykai使用數組不會解決他的問題:'for myHost $ HOSTS'是正確的。 – olibre 2012-01-18 22:26:17

+0

試圖理解。如果第一個「IP_ADRESS」失敗,它會發送ping到「ANOTHER_IP」呢?如果「YET_ANOTHER」上有IP,會發生什麼情況? – 2012-01-18 22:28:27

+0

如果'IP_ADDRESS'失敗,它會打印你想要的行。然後它將'$ myHost'變量設置爲hte數組中的下一個IP。然後給它打。無論發生什麼,它都會遍歷數組中的每個元素。 – 2012-01-19 06:44:05

2

你可以把ping東西的功能。您無需處理(grepping結果:您可以依靠ping返回退出狀態。

#!/bin/bash 
HOSTS="IP1 IP2 IP3 IP4 IP5" 
COUNT=4 

pingtest(){ 
    for myHost in "[email protected]" 
    do 
    ping -c "$COUNT" "$myHost" && return 1 
    done 
    return 0 
} 

if pingtest $HOSTS 
then 
    # 100% failed 
    echo "Server failed at $(date)" | mail -s "Server Down" [email protected] 
    echo "All hosts ($HOSTS) are down (ping failed) at $(date)" 
fi 
+0

好吧,我會試試這個,thanx。我的理解是否正確:如果IP1和IP2出現故障,它將發送ping到IP3,如果那個出現了,它會在那裏停止? – 2012-01-18 23:14:01

+0

好的,你已經理解了腳本;-)不要忘記投票答案:-D – olibre 2012-01-18 23:19:08

+0

@oHessling你試過這個嗎?就我所見,至少回顯'$ myHost'失敗,因爲這是一個局部變量。如果您在'for'循環中執行返回操作,則下一個IP永遠不會被ping通。 – 2012-01-19 06:52:40