Last active
March 10, 2023 13:46
-
-
Save quericy/51c90dd39cc3fd315925a9d36a44c906 to your computer and use it in GitHub Desktop.
AsusMerlin(koolshare)Router-network-checker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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