2010-06-19 63 views
0

每天晚上我都會經歷同樣的檢查我們T1的故障轉移系統的過程。我基本上經歷了以下過程:繼續使用bash對traceroute結果進行grep

啓動故障轉移過程。

traceroute $server; 

一旦我看到它失敗了,我驗證連接是通過SSH服務器工作的。

ssh $server; 

然後,一旦我看到它的作品,我把它從故障轉移。

所以我想要做的是不斷運行一個traceroute,直到我得到一個特定的結果,然後運行一個SSH命令。

回答

1

把你成功的消息列表中的文件(忽略行的變量線和分數,並使用^,以確定該行的開始,因爲這樣的:)

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假陽性。

1

我認爲使用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 
+0

的我可能不會使用ping的原因是因爲這個故障轉移系統非常好,而且通常只有幾秒鐘纔會啓動。 traceroute讓我看到它在故障轉移路線上。雖然謝謝:) – PsychoKlown 2011-03-27 04:45:52