Skip to content

Instantly share code, notes, and snippets.

@quericy
Last active March 10, 2023 13:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save quericy/51c90dd39cc3fd315925a9d36a44c906 to your computer and use it in GitHub Desktop.
Save quericy/51c90dd39cc3fd315925a9d36a44c906 to your computer and use it in GitHub Desktop.
AsusMerlin(koolshare)Router-network-checker
#!/bin/sh
# name: koolshare联网检测+自动重启网络脚本
# scriptFilePath: /koolshare/scripts/checknetwork.sh
# referenceLink: https://post.m.smzdm.com/p/a25dgzmq/
#
# usage:
# vim /jffs/scripts/services-start
# #!/bin/sh
# #services-start创建定时任务添加本脚本,每2分钟一次检测网络,多次探测均断网则自动重新拨号
# /usr/sbin/cru a checknetwork "*/2 * * * * /bin/sh /koolshare/scripts/checknetwork.sh"
#
#联网探测url(主站点)
try_url=www.baidu.com
#联网探测url(备用站点)
backup_url=www.example.com
#超时时间(秒)
try_timeout=5
#检测重试次数
retry_times=3
#curl检测
function check_curl()
{
#获取响应状态码
local ret_code=`curl -I -s --connect-timeout ${2} ${1} -w %{http_code} | tail -n1`
if [ "x$ret_code" = "x200" ]; then
#网络畅通
return 1
else
#网络不畅通
return 0
fi
return 0
}
#ping检测
function check_ping()
{
#筛选错误关键词
local err_num=`ping -c 1 -W ${2} ${1} 2>&1 |grep -E "100% packet loss|bad address"|wc -l`
if [ "$err_num" -eq 0 ]; then
#网络畅通
return 1
else
#网络不畅通
return 0
fi
return 0
}
#重启网络
function restart_wan()
{
/usr/bin/logger -c "无法连接互联网,准备重新拨号!"
killall pppd
/usr/bin/logger -c "已断开拨号连接,延时10秒..."
sleep 10
/usr/bin/logger -c "正在重新拨号..."
/usr/sbin/pppd file /tmp/ppp/options.wan0 >/dev/null 2>&1 &
}
#检测主逻辑
i=1
try_times=`expr ${retry_times} + 1`
while [ "$i" -lt "$try_times" ]; do
check_curl $try_url $try_timeout
curl_res=$?
check_ping $try_url $try_timeout
ping_res=$?
/usr/bin/logger -c "第${i}次网络检测,url:${try_url},curl:${curl_res},ping:${ping_res}"
if [ "$curl_res" -eq 1 ]&&[ "$ping_res" -eq 1 ]; then
break
fi
#对调切换主备探测url
tmp_url=$backup_url
backup_url=$try_url
try_url=$tmp_url
#延迟重新检测
sleep 15
i=$((i + 1))
done
# 重试了多次,最后仍然有至少一种方式无网络,重新拨号
if [ "$curl_res" -eq 0 ]||[ "$ping_res" -eq 0 ]; then
restart_wan
check_curl $try_url $try_timeout
curl_res=$?
check_ping $try_url $try_timeout
ping_res=$?
/usr/bin/logger -c "重新拨号后网络检测完成,url:${try_url},curl:${curl_res},ping:${ping_res}"
exit -1
else
/usr/bin/logger -c "网络检测完成,本次网络正常"
fi
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment