2012-01-18 83 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