我想要创建一个脚本的ddwrt,在4主机上的pings检查互联网是否可用。如果在4个测试中,其中一个ping结果实现了,那么假设internet正在工作,否则没有连接。至少有一个测试需要实现。
这就是我一直在写的剧本。
#!/bin/sh
result=`ping -c 1 8.8.8.8 | grep -c from`
sleep 10
result+=`ping -c 1 www.google.com | grep -c from`
# I want the output from this command to add into result variable. For example, if result value is 0 then add the value of next ping command into 0, same with the rest of the commands. Is that possible?
sleep 10
result+=`ping -c 1 www.microsoft.com | grep -c from`
sleep 10
result+=`ping -c 1 www.youtube.com | grep -c from`
if [ $result -ge 1 ]
then
echo "Internet alright"
logger -t 'InternetCheck' 'Internet is Connected'
logger "ping $result"
else
logger -t 'InternetCheck' 'After many ping tests, the Internet is not working... will apply solution'
logger "ping $result"
fi虽然ddwrt已经提供了看门狗,但我不希望路由器重新启动,相反,我想运行命令在那个时刻,以解决问题。请给我其他的建议。
致以问候!
发布于 2021-06-24 11:49:46
一些想法:
ping的退出状态为-0,如果没有,则为非-0。你可以用这个代替打招呼。wait等待它们。这样你就不用等到4个不成功的点击才知道你的互联网连接中断了。这个脚本(只适用于2个it,不包括日志记录内容,您可以轻松地扩展它)将在很短的时间内给出答案(您的脚本运行至少30秒+任何ping超时),并返回退出状态0或1,这取决于ping是否成功或全部失败。它使用-W选项设置一个短超时;除非您的internet连接确实不稳定,否则至少有一个地址应该在不到一秒钟内返回响应。
#!/bin/sh
IP1=8.8.8.8
IP2=4.4.4.4
#start first ping, remember its pid
ping -W 1 -c 1 $IP1 >/dev/null&
PID1=$!
# start second ping, remember its pid
ping -W 1 -c 1 $IP2 >/dev/null&
PID2=$!
# wait for pings to finish
if wait $PID1
then echo $IP1 is reachable, internet is working; exit 0
fi
if wait $PID2
then echo $IP2 is reachable, internet is working; exit 0
fi
# none reachable
echo all pings failed, internet is down
exit 1https://unix.stackexchange.com/questions/655652
复制相似问题