0

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

启动故障转移过程。

traceroute $server;

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

ssh $server;

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

所以我想要做的是不断地运行一个traceroute,直到我得到某个结果,然后运行一个SSH命令。

4

2 回答 2

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
于 2010-08-10T04:31:09.117 回答
1

将您的成功消息列表放在一个文件中(省略行的可变行和分数,并使用 ^ 来标识行的开头,如下所示:)

模式列表:

^ 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 地址,而是下一次解析的名称,从而导致误报。

于 2010-06-19T04:21:39.497 回答