我一直在准备一个脚本,它可以帮助使用traceroute 命令监控WAN 链接。
- 用于从跟踪路由中 grep 主 WAN IP 的脚本,如果找到则回显主节点已启动。
- 如果未找到主 IP,则在跟踪路由中 grep 辅助 IP 并 echo Primary down, secondary UP。
- 如果两个 IP 均未找到,则 echo PRimary 和 secondary 均已关闭
我准备了类似的东西,但无法使其发挥作用。
echo "`traceroute 4.4.4.4>/tmp/trace.txt`"
grep “1.1.1.1” /tmp/trace.txt &> /dev/null
if [ $? -eq 0 ] ; then
echo “Primary Is UP“
else
grep “2.2.2.2” /tmp/trace.txt &> /dev/null
if [ $? -eq 0 ] ; then
echo “ Primary failed, Secondary Running”
else
echo "Primary & Secondary both failed"
fi
fi
答案1
为了快速测试,如果不需要,请不要使用traceroute。请尝试使用记录路由 (-R) 选项进行 ping 操作。使用 -c 选项仅发出一个请求,使用 -n 选项不解析路由主机名,使用 -W 选项不等待太长时间失败。也许是这样的:
if ping -R -n -c1 -W2 4.4.4.4 >/tmp/trace.txt
then
#echo something is up
if grep -q '\<1\.1\.1\.1\>' /tmp/trace.txt
then
echo Primary Is UP
elif grep -q '\<2\.2\.2\.2\>' /tmp/trace.txt
then
echo Primary failed, Secondary Running
else
echo "Primary & Secondary both failed, but something else Running"
fi
else
echo "Primary & Secondary both failed"
fi
您可能需要说服一台或多台路由器遵守记录路由。
答案2
删除echo
脚本第一行中的引号,只需保留命令traceroute
。你的脚本应该写成:
traceroute ....
grep .....
...