每天晚上,我都会经历相同的过程来检查 T1 的故障转移系统。我基本上经历了以下过程:
启动故障转移过程。
traceroute $server;
一旦我看到它已故障转移,我会通过 SSH 连接到服务器来验证连接是否正常。
ssh $server;
然后,一旦我看到它有效,我就将其从故障转移中移除。
所以我想要做的是不断地运行一个traceroute,直到我得到某个结果,然后运行一个SSH命令。
每天晚上,我都会经历相同的过程来检查 T1 的故障转移系统。我基本上经历了以下过程:
启动故障转移过程。
traceroute $server;
一旦我看到它已故障转移,我会通过 SSH 连接到服务器来验证连接是否正常。
ssh $server;
然后,一旦我看到它有效,我就将其从故障转移中移除。
所以我想要做的是不断地运行一个traceroute,直到我得到某个结果,然后运行一个SSH命令。
我认为您最好使用 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
将您的成功消息列表放在一个文件中(省略行的可变行和分数,并使用 ^ 来标识行的开头,如下所示:)
模式列表:
^ 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 地址,而是下一次解析的名称,从而导致误报。