From cec0ab412e0fddbb90068b310c146a4e3f571b13 Mon Sep 17 00:00:00 2001 From: William Chan Date: Mon, 6 Jan 2020 22:24:16 +0800 Subject: [PATCH] luci-app-ssr-plus: added try count (#2706) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 有时候只不过是短暂性的无法访问, 多尝试一次就可以. 所以增加尝试次数, 默认每秒钟检查一次. --- .../model/cbi/shadowsocksr/advanced.lua | 13 ++-- .../luci-app-ssr-plus/po/zh-cn/ssr-plus.po | 3 + .../root/etc/config/shadowsocksr | 1 + .../luci-app-ssr-plus/root/usr/bin/ssr-switch | 60 +++++++++++-------- 4 files changed, 47 insertions(+), 30 deletions(-) diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua index 5c7657424..fe36f013c 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua @@ -10,10 +10,10 @@ uci:foreach(shadowsocksr, "servers", function(s) end end) -local key_table = {} -for key,_ in pairs(server_table) do - table.insert(key_table,key) -end +local key_table = {} +for key,_ in pairs(server_table) do + table.insert(key_table,key) +end table.sort(key_table) @@ -38,6 +38,11 @@ o.datatype = "uinteger" o:depends("enable_switch", "1") o.default = 5 +o = s:option(Value, "switch_try_count", translate("Check Try Count")) +o.datatype = "uinteger" +o:depends("enable_switch", "1") +o.default = 3 + -- [[ SOCKS5 Proxy ]]-- if nixio.fs.access("/usr/bin/ssr-local") then s = m:section(TypedSection, "socks5_proxy", translate("SOCKS5 Proxy")) diff --git a/package/lean/luci-app-ssr-plus/po/zh-cn/ssr-plus.po b/package/lean/luci-app-ssr-plus/po/zh-cn/ssr-plus.po index b98c755ec..f5f5cc06b 100644 --- a/package/lean/luci-app-ssr-plus/po/zh-cn/ssr-plus.po +++ b/package/lean/luci-app-ssr-plus/po/zh-cn/ssr-plus.po @@ -320,6 +320,9 @@ msgstr "自动切换检查周期(秒)" msgid "Check timout(second)" msgstr "切换检查超时时间(秒)" +msgid "Check Try Count" +msgstr "切换检查重试次数" + msgid "Enable Process Deamon" msgstr "启用进程自动守护" diff --git a/package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr b/package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr index 7741d6908..9d30a274e 100644 --- a/package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr +++ b/package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr @@ -9,6 +9,7 @@ config global option enable_switch '1' option switch_timeout '5' option switch_time '667' + option switch_try_count '3' config socks5_proxy option server 'nil' diff --git a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-switch b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-switch index 9be20f019..e671bcd1a 100755 --- a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-switch +++ b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-switch @@ -35,31 +35,39 @@ CURRENT_SERVER=$DEFAULT_SERVER #判断代理是否正常 check_proxy() { -/usr/bin/ssr-check www.google.com 80 $switch_time 1 -if [ "$?" == "0" ]; then - return 0 -else - /usr/bin/ssr-check www.baidu.com 80 $switch_time 1 - if [ "$?" == "0" ]; then - #goole不通baidu通则不正常 - return 1 - else - return 2 - fi -fi -return 0 + local result=0 + local try_count=$(uci_get_by_type global switch_try_count 3) + for i in $(seq 1 $try_count) + do + /usr/bin/ssr-check www.google.com 80 $switch_time 1 + if [ "$?" == "0" ]; then + # echo "$(date "+%Y-%m-%d %H:%M:%S") Check Google Proxy Success, count=$i" >> /tmp/ssrplus.log + result=0 + break + else + # echo "$(date "+%Y-%m-%d %H:%M:%S") Check Google Proxy Fail, count=$i" >> /tmp/ssrplus.log + /usr/bin/ssr-check www.baidu.com 80 $switch_time 1 + if [ "$?" == "0" ]; then + result=1 + else + result=2 + fi + fi + sleep 1; + done + return $result; } test_proxy() { local servername=$(uci_get_by_name $1 server) local serverport=$(uci_get_by_name $1 server_port) -ret=$(ping -c 3 $servername | grep 'loss' | awk -F ',' '{ print $3 }' | awk -F "%" '{ print $1 }') +ret=$(ping -c 3 $servername | grep 'loss' | awk -F ',' '{ print $3 }' | awk -F "%" '{ print $1 }') [ -z "$ret" ] && return 1 [ "$ret" -gt "50" ] && return 1 ipset add ss_spec_wan_ac $servername 2>/dev/null ret=$? -/usr/bin/ssr-check $servername $serverport $switch_time +/usr/bin/ssr-check $servername $serverport $switch_time local ret2=$? if [ "$ret" = "0" ] ;then ipset del ss_spec_wan_ac $servername 2>/dev/null @@ -81,7 +89,7 @@ local servername=$(uci_get_by_name $1 server) local serverport=$(uci_get_by_name $1 server_port) ipset add ss_spec_wan_ac $servername 2>/dev/null ret=$? - /usr/bin/ssr-check $servername $serverport $switch_time + /usr/bin/ssr-check $servername $serverport $switch_time local ret2=$? if [ "$ret" = "0" ] ;then ipset del ss_spec_wan_ac $servername 2>/dev/null @@ -117,12 +125,12 @@ start() { [ $(uci_get_by_name $DEFAULT_SERVER kcp_enable) = "1" ] && return 1 while [ "1" = "1" ] #死循环 -do +do sleep $cycle_time - + LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") - - + + #判断当前代理是否为缺省服务器 if [ "$CURRENT_SERVER" != "$DEFAULT_SERVER" ] ;then #echo "not default proxy" @@ -134,7 +142,7 @@ do echo "$(date "+%Y-%m-%d %H:%M:%S") Main server is avilable." >> /tmp/ssrplus.log #缺省服务器正常,切换回来 CURRENT_SERVER=$DEFAULT_SERVER - switch_proxy $CURRENT_SERVER + switch_proxy $CURRENT_SERVER echo "$(date "+%Y-%m-%d %H:%M:%S") switch to default ["$(uci_get_by_name $CURRENT_SERVER server)"] proxy!" >> /tmp/ssrplus.log continue else @@ -143,14 +151,14 @@ do fi #判断当前代理是否正常 - check_proxy + check_proxy current_ret=$? - + if [ "$current_ret" = "1" ] ;then #当前代理错误,判断有无可用的服务器 #echo "current error" echo "$(date "+%Y-%m-%d %H:%M:%S") Current server error, try to switch another server." >> /tmp/ssrplus.log - + select_proxy if [ "$ENABLE_SERVER" != nil ] ;then #有其他服务器可用,进行切换 @@ -162,11 +170,11 @@ do echo "$(date "+%Y-%m-%d %H:%M:%S") ShadowsocksR server switch OK" >> /tmp/ssrplus.log else switch_proxy $CURRENT_SERVER - normal_flag=1 + normal_flag=1 echo "$(date "+%Y-%m-%d %H:%M:%S") Try restart current server." >> /tmp/ssrplus.log fi else - normal_flag=0 + normal_flag=0 echo "$(date "+%Y-%m-%d %H:%M:%S") ShadowsocksR No Problem." >> /tmp/ssrplus.log fi