继续使用bash grep查找traceroute结果

时间:2010-06-19 03:49:04

标签: linux grep traceroute bash

每天晚上我都会检查T1的故障转移系统。我基本上经历了以下过程:

启动故障转移过程。

traceroute $server;

一旦我看到它的故障转移,我通过SSH连接到服务器来验证连接是否正常工作。

ssh $server;

然后,一旦我看到它有效,我就将其从故障转移中解脱出来。

所以我想做的是继续运行traceroute,直到得到一定的结果,然后运行SSH命令。<​​/ p>

2 个答案:

答案 0 :(得分: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地址,而是下一个名称,导致误报。

答案 1 :(得分:1)

我认为使用ping命令验证服务器的可访问性比使用traceroute更好。

很容易检查ping命令的返回状态而不使用任何grep:

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