mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
Track is shadowsocks is up or not
This commit is contained in:
parent
0e22cbd6b2
commit
0387798d74
6 changed files with 146 additions and 12 deletions
31
omr-tracker/files/bin/omr-tracker-ss
Executable file
31
omr-tracker/files/bin/omr-tracker-ss
Executable file
|
@ -0,0 +1,31 @@
|
|||
#!/bin/sh
|
||||
# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 :
|
||||
|
||||
name=$0
|
||||
basename="$(basename $0)"
|
||||
|
||||
log() {
|
||||
logger -p daemon.info -t "${basename}" "$@"
|
||||
}
|
||||
|
||||
timeout=$OMR_TRACKER_TIMEOUT
|
||||
interval=$OMR_TRACKER_INTERVAL
|
||||
retry=$OMR_TRACKER_TRIES
|
||||
proxy=$OMR_TRACKER_PROXY
|
||||
|
||||
last=0
|
||||
|
||||
while true; do
|
||||
host=${OMR_TRACKER_HOSTS%% *}
|
||||
if curl -s --socks5 "${proxy}" --max-time "${timeout}" --retry "${retry}" "$host" &>/dev/null ; then
|
||||
[ ${last} = 0 ] && log "Shadowsocks is up"
|
||||
/etc/init.d/shadowsocks-libev rules_up 2> /dev/null
|
||||
last=1
|
||||
else
|
||||
[ ${last} = 1 ] && log "Shadowsocks is down"
|
||||
/etc/init.d/shadowsocks-libev rules_down 2> /dev/null
|
||||
last=0
|
||||
fi
|
||||
|
||||
sleep "${interval}"
|
||||
done
|
|
@ -10,6 +10,14 @@ config defaults 'defaults'
|
|||
list hosts '80.67.169.40'
|
||||
option timeout '1'
|
||||
option tries '4'
|
||||
option interval '2'
|
||||
option interval '4'
|
||||
option type 'ping'
|
||||
option options ''
|
||||
|
||||
config defaults 'shadowsocks'
|
||||
option enabled '1'
|
||||
list hosts 'google.com'
|
||||
list hosts 'bing.com'
|
||||
option timeout '1'
|
||||
option tries '2'
|
||||
option interval '10'
|
|
@ -18,7 +18,7 @@ _validate_section() {
|
|||
'timeout:uinteger' \
|
||||
'tries:uinteger' \
|
||||
'interval:uinteger' \
|
||||
'type:string' \
|
||||
'type:string:ping' \
|
||||
'enabled:bool:1' \
|
||||
'options:string'
|
||||
|
||||
|
@ -36,10 +36,7 @@ _launch_tracker() {
|
|||
loopback|lan*|if0*|tun*) return;;
|
||||
esac
|
||||
|
||||
local interface_type
|
||||
config_get interface_type "$1" type
|
||||
|
||||
local hosts timeout tries interval options type
|
||||
local hosts timeout tries interval options type enabled
|
||||
_validate_section "defaults" "defaults"
|
||||
_validate_section "interface" "$1"
|
||||
|
||||
|
@ -50,7 +47,6 @@ _launch_tracker() {
|
|||
|
||||
[ -z "$ifname" ] || [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "glorytun" ] && return
|
||||
[ $enabled = 0 ] && return
|
||||
[ -z "$type" ] && type="ping"
|
||||
|
||||
procd_open_instance
|
||||
# shellcheck disable=SC2086
|
||||
|
@ -69,9 +65,70 @@ _launch_tracker() {
|
|||
procd_close_instance
|
||||
}
|
||||
|
||||
_initialize_shadowsocks_tracker() {
|
||||
local redir_tcp server tracker_server
|
||||
config_get redir_tcp ss_rules redir_tcp
|
||||
config_get server $redir_tcp server
|
||||
config_get tracker_server "tracker" server
|
||||
[ "$server" = "$tracker_server" ] || {
|
||||
[ -z "$tracker_server" ] && {
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
set shadowsocks-libev.tracker=ss_local
|
||||
set shadowsocks-libev.tracker.server=$server
|
||||
set shadowsocks-libev.tracker.local_address="127.0.0.1"
|
||||
set shadowsocks-libev.tracker.local_port=1111
|
||||
set shadowsocks-libev.tracker.mode=tcp_and_udp
|
||||
set shadowsocks-libev.tracker.timeout=60
|
||||
set shadowsocks-libev.tracker.fast_open=1
|
||||
set shadowsocks-libev.tracker.reuse_port=1
|
||||
set shadowsocks-libev.tracker.mptcp=1
|
||||
set shadowsocks-libev.tracker.verbose=0
|
||||
commit shadowsocks-libev
|
||||
EOF
|
||||
} || {
|
||||
uci -q set shadowsocks-libev.tracker.server=$server
|
||||
}
|
||||
/etc/init.d/shadowsocks-libev restart
|
||||
}
|
||||
}
|
||||
|
||||
_launch_shadowsocks_tracker() {
|
||||
local hosts timeout tries interval local_port enabled
|
||||
|
||||
[ "$1" = "tracker" ] || return
|
||||
|
||||
_validate_section "defaults" "shadowsocks"
|
||||
|
||||
config_get local_port "$1" local_port
|
||||
local disabled
|
||||
config_get disabled "$1" disabled 0
|
||||
|
||||
[ $enabled = 0 ] && return
|
||||
[ $disabled = 1 ] && return
|
||||
|
||||
procd_open_instance
|
||||
# shellcheck disable=SC2086
|
||||
procd_set_param command /bin/omr-tracker-ss "$1"
|
||||
procd_append_param env "OMR_TRACKER_HOSTS=$hosts"
|
||||
procd_append_param env "OMR_TRACKER_TIMEOUT=$timeout"
|
||||
procd_append_param env "OMR_TRACKER_TRIES=$tries"
|
||||
procd_append_param env "OMR_TRACKER_INTERVAL=$interval"
|
||||
procd_append_param env "OMR_TRACKER_PROXY=127.0.0.1:$local_port"
|
||||
procd_set_param limits nofile="51200 51200"
|
||||
procd_set_param respawn 0 10 0
|
||||
procd_set_param stderr 1
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load shadowsocks-libev
|
||||
_initialize_shadowsocks_tracker
|
||||
|
||||
config_load network
|
||||
config_foreach _launch_tracker interface
|
||||
|
||||
config_load shadowsocks-libev
|
||||
config_foreach _launch_shadowsocks_tracker ss_local
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue