清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
#!/bin/sh
# halt command
HALT=halt
ping_forever_host(){
IP=$1
time_out=$2
count=3
kernel=`uname -s`
total_miss=0
echo "ups check host '${IP}' for (${time_out}) seconds, [forever mode]"
# ping host, if miss recieved packets, then add to total_miss
while true
do
case $kernel in
VMkernel) #esxi 5.1
ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, \(.*\) packets received,.*/\1/'`
;;
Darwin) #MacOS X 10.7.4
ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, \(.*\) packets received,.*/\1/'`
;;
Linux) #ubuntu 12.04
ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, \(.*\) received,.*/\1/'`
;;
*)
echo "Unknown Architecture $kernel"
exit 1
;;
esac
miss=$((count-ret))
if [ $miss -eq $count ]; then
total_miss=$((total_miss+miss))
echo "total_miss: ${total_miss} --> ${time_out}"
else
total_miss=0
fi
# if miss count over limit, then halt the computer!!!
if [ $total_miss -ge $time_out ]; then
echo "SYSTEM WILL HALT AT '`date`'!!!"
${HALT}
break;
fi
done
}
ping_once_host(){
IP=$1
count=$2
time_out=$2
kernel=`uname -s`
total_miss=0
echo "ups check host '${IP}' for (${time_out}) seconds, [once mode]"
# ping host, if miss recieved packets, then add to total_miss
case $kernel in
VMkernel) #esxi 5.1
ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, \(.*\) packets received,.*/\1/'`
;;
Darwin) #MacOS X 10.7.4
ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, \(.*\) packets received,.*/\1/'`
;;
Linux) #ubuntu 12.04
ret=`ping -c ${count} -W 1 ${IP} 2>&1|grep 'packets transmitted'|sed 's/.*, \(.*\) received,.*/\1/'`
;;
*)
echo "Unknown Architecture $kernel"
exit 1
;;
esac
miss=$((count-ret))
if [ $miss -eq $count ]; then
total_miss=$((total_miss+miss))
echo "total_miss: ${total_miss} --> ${time_out}"
else
total_miss=0
fi
# if miss count over limit, then halt the computer!!!
if [ $total_miss -ge $time_out ]; then
echo "SYSTEM WILL HALT AT '`date`'!!!"
${HALT}
fi
}
main(){
action=$1;
case $action in
forever) #run forever
ping_forever_host $2 $3
;;
once) # run once
ping_once_host $2 $3
;;
*)
echo "usage: sudo ./ups_check forever 192.168.2.1 120"
echo "usage: sudo ./ups_check once 192.168.2.1 60"
exit 1
;;
esac
}
main $1 $2 $3