| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #!/bin/sh
- #
- # Copyright (C) 2017 openwrt-ssr
- # Copyright (C) 2017 yushi studio <[email protected]>
- #
- # This is free software, licensed under the GNU General Public License v3.
- # See /LICENSE for more information.
- #
- 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}
- }
- 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=$(uci_get_by_name $GLOBAL_SERVER server)
- 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}
- if echo "$server" | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then
- server=${server}
- else
- server=$(cat /etc/ssr_ip)
- fi
- while [ "1" == "1" ]; do #死循环
- sleep 30
- #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
- 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
- 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 -d &)
- 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
|