每天晚上我都會經歷同樣的檢查我們T1的故障轉移系統的過程。我基本上經歷了以下過程:繼續使用bash對traceroute結果進行grep
啓動故障轉移過程。
traceroute $server;
一旦我看到它失敗了,我驗證連接是通過SSH服務器工作的。
ssh $server;
然後,一旦我看到它的作品,我把它從故障轉移。
所以我想要做的是不斷運行一個traceroute,直到我得到一個特定的結果,然後運行一個SSH命令。
每天晚上我都會經歷同樣的檢查我們T1的故障轉移系統的過程。我基本上經歷了以下過程:繼續使用bash對traceroute結果進行grep
啓動故障轉移過程。
traceroute $server;
一旦我看到它失敗了,我驗證連接是通過SSH服務器工作的。
ssh $server;
然後,一旦我看到它的作品,我把它從故障轉移。
所以我想要做的是不斷運行一個traceroute,直到我得到一個特定的結果,然後運行一個SSH命令。
把你成功的消息列表中的文件(忽略行的變量線和分數,並使用^,以確定該行的開始,因爲這樣的:)
patterns.list:
^ 7 4.68.63.165
^ 8 4.68.17.133
^ 9 4.79.168.210
^10 216.239.48.108
^11 66.249.94.46
^12 72.14.204.99
然後一個簡單的while循環:
while ! traceroute -n ${TARGET} | grep -f patterns.list
do
sleep 5 # 5 second delay between traceroutes, for niceness.
done
ssh ${DESTINATION}
用traceroute -n生成輸出,使你沒有得到解析一次的IP地址,但和名稱接下來,resulti假陽性。
我認爲使用ping命令驗證服務器的可訪問性比traceroute更好。
這是很容易,而無需使用任何grep的所有檢查ping命令的返回狀態:
if [ ping -c 4 -n -q 10.10.10.10 >/dev/null 2>& ]; then
echo "Server is ok"
else
echo "Server is down"
fi
如果你想繼續做一個循環,試試這個:
function check_ssh {
# do your ssh stuff here
echo "performing ssh test"
}
while : ; do
if [ ping -c 4 -n -q 10.10.10.10 >/dev/null 2>& ]; then
echo "Server is ok"
check_ssh
else
echo "Server is down"
fi
sleep 60
done
的我可能不會使用ping的原因是因爲這個故障轉移系統非常好,而且通常只有幾秒鐘纔會啓動。 traceroute讓我看到它在故障轉移路線上。雖然謝謝:) – PsychoKlown 2011-03-27 04:45:52