mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00

* luci-app-ssr-plus:Fix Socks5 startup errors * luci-app-ssr-plus:Fix pdnsd EOF warning errors * luci-app-ssr-plus: ssr-switch Adjust Output * luci-app-ssr-plus: Data Update
148 lines
4.7 KiB
Bash
Executable File
148 lines
4.7 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (C) 2017 openwrt-ssr
|
|
# Copyright (C) 2017 yushi studio <ywb94@qq.com>
|
|
#
|
|
# This is free software, licensed under the GNU General Public License v3.
|
|
# See /LICENSE for more information.
|
|
#
|
|
LOCK_FILE="/var/lock/ssr-monitor.lock"
|
|
[ -f "$LOCK_FILE" ] && exit 2
|
|
touch "$LOCK_FILE"
|
|
|
|
NAME=shadowsocksr
|
|
|
|
uci_get_by_name() {
|
|
local ret=$(uci get $NAME.$1.$2 2>/dev/null)
|
|
echo ${ret:=$3}
|
|
}
|
|
|
|
uci_get_by_type() {
|
|
local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null)
|
|
echo ${ret:=$3}
|
|
}
|
|
|
|
get_host_ip() {
|
|
local host=$1
|
|
local isip=""
|
|
local ip=$host
|
|
isip=$(echo $host | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}")
|
|
if [ -z "$isip" ]; then
|
|
if [ "$host" != "${host#*:[0-9a-fA-F]}" ]; then
|
|
ip=$host
|
|
else
|
|
local ip=$(resolveip -4 -t 3 $host | awk 'NR==1{print}')
|
|
# local hostip=$(ping $host -W 1 -s 1 -c 1 | grep PING | cut -d'(' -f 2 | cut -d')' -f1)
|
|
[ -z "$ip" ] && ip=$(wget -q -O- http://119.29.29.29/d?dn=$1 | awk -F ';' '{print $1}')
|
|
fi
|
|
fi
|
|
echo ${ip:="127.0.0.1"}
|
|
}
|
|
|
|
server_process_count=$1
|
|
redir_tcp_process=$2
|
|
redir_udp_process=$3
|
|
tunnel_process=$4
|
|
kcp_process=$5
|
|
local_process=$6
|
|
pdnsd_process=$7
|
|
if [ -z "$pdnsd_process" ]; then
|
|
pdnsd_process=0
|
|
fi
|
|
i=0
|
|
GLOBAL_SERVER=$(uci_get_by_type global global_server)
|
|
server=$(get_host_ip $(uci_get_by_name $GLOBAL_SERVER server))
|
|
[ "$server" == "127.0.0.1" ] && hostip=$(uci_get_by_name $GLOBAL_SERVER ip)
|
|
lkcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port)
|
|
server_port=$(uci_get_by_name $GLOBAL_SERVER server_port)
|
|
password=$(uci_get_by_name $GLOBAL_SERVER kcp_password)
|
|
kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param)
|
|
[ "$password" != "" ] && password="--key "${password}
|
|
|
|
while [ "1" == "1" ]; do #死循环
|
|
sleep 30s
|
|
#redir tcp
|
|
if [ "$redir_tcp_process" -gt 0 ]; then
|
|
icount=$(busybox ps -w | grep ssr-retcp | grep -v grep | wc -l)
|
|
if [ "$icount" == 0 ]; then
|
|
logger -t "$NAME" "ssr redir tcp error.restart!"
|
|
/etc/init.d/shadowsocksr restart
|
|
exit 0
|
|
fi
|
|
fi
|
|
#redir udp
|
|
if [ "$redir_udp_process" -gt 0 ]; then
|
|
icount=$(busybox ps -w | grep ssr-reudp | grep -v grep | wc -l)
|
|
if [ "$icount" == 0 ]; then
|
|
logger -t "$NAME" "ssr redir udp error.restart!"
|
|
/etc/init.d/shadowsocksr restart
|
|
exit 0
|
|
fi
|
|
fi
|
|
#tunnel
|
|
if [ "$tunnel_process" -gt 0 ]; then
|
|
icount=$(busybox ps -w | grep ssr-tunnel | grep -v grep | wc -l)
|
|
if [ "$icount" == 0 ]; then
|
|
logger -t "$NAME" "ssr tunnel error.restart!"
|
|
/etc/init.d/shadowsocksr restart
|
|
exit 0
|
|
fi
|
|
fi
|
|
#server
|
|
if [ "$server_process_count" -gt 0 ]; then
|
|
icount=$(busybox ps -w | grep ssr-server | grep -v grep | wc -l)
|
|
if [ "$icount" -lt "$server_process_count" ]; then #如果进程挂掉就重启它
|
|
logger -t "$NAME" "ssr server error.restart!"
|
|
kill -9 $(busybox ps -w | grep ssr-server | grep -v grep | awk '{print $1}') >/dev/null 2>&1
|
|
/etc/init.d/shadowsocksr restart
|
|
exit 0
|
|
fi
|
|
fi
|
|
#kcptun
|
|
if [ "$kcp_process" -gt 0 ]; then
|
|
icount=$(busybox ps -w | grep kcptun-client | grep -v grep | wc -l)
|
|
if [ "$icount" -lt "$kcp_process" ]; then #如果进程挂掉就重启它
|
|
logger -t "$NAME" "ssr kcptun error.restart!"
|
|
killall -q -9 kcptun-client
|
|
(/usr/bin/kcptun-client -r $server:$kcp_port -l :$server_port $password $kcp_param &)
|
|
fi
|
|
fi
|
|
#localsocks
|
|
if [ "$local_process" -gt 0 ]; then
|
|
icount=$(busybox ps -w | grep ssr-local | grep -v grep | wc -l)
|
|
if [ "$icount" -lt "$local_process" ]; then #如果进程挂掉就重启它
|
|
logger -t "$NAME" "global socks server error.restart!"
|
|
kill -9 $(busybox ps -w | grep ssr-local | grep -v grep | awk '{print $1}') >/dev/null 2>&1
|
|
/etc/init.d/shadowsocksr restart
|
|
exit 0
|
|
fi
|
|
fi
|
|
#pdnsd
|
|
if [ "$pdnsd_process" -eq 1 ]; then
|
|
icount=$(busybox ps -w | grep pdnsd | grep -v grep | wc -l)
|
|
if [ "$icount" -lt "$pdnsd_process" ]; then #如果进程挂掉就重启它
|
|
logger -t "$NAME" "pdnsd tunnel error.restart!"
|
|
if [ -f /var/run/pdnsd.pid ]; then
|
|
kill $(cat /var/run/pdnsd.pid) >/dev/null 2>&1
|
|
else
|
|
kill -9 $(ps | grep pdnsd | grep -v grep | awk '{print $1}') >/dev/null 2>&1
|
|
fi
|
|
(/usr/sbin/pdnsd -c /var/etc/pdnsd.conf &)
|
|
fi
|
|
fi
|
|
#dns2socks
|
|
if [ "$pdnsd_process" -eq 2 ]; then
|
|
icount=$(busybox ps -w | grep -e ssr-dns -e dns2socks | grep -v grep | wc -l)
|
|
if [ "$icount" -lt 2 ]; then #如果进程挂掉就重启它
|
|
logger -t "$NAME" "dns2socks $dnsstr tunnel error.restart!"
|
|
dnsstr=$(uci_get_by_type global tunnel_forward 8.8.4.4:53)
|
|
dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}')
|
|
dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}')
|
|
killall -q -9 dns2socks
|
|
kill -9 $(busybox ps -w | grep ssr-dns | grep -v grep | awk '{print $1}') >/dev/null 2>&1
|
|
microsocks -i 127.0.0.1 -p 10802 ssr-dns >/dev/null 2>&1 &
|
|
dns2socks 127.0.0.1:10802 $dnsserver:$dnsport 127.0.0.1:5335 -q >/dev/null 2>&1 &
|
|
fi
|
|
fi
|
|
done
|