ssr-monitor 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #!/bin/sh
  2. #
  3. # Copyright (C) 2017 openwrt-ssr
  4. # Copyright (C) 2017 yushi studio <[email protected]>
  5. #
  6. # This is free software, licensed under the GNU General Public License v3.
  7. # See /LICENSE for more information.
  8. #
  9. NAME=shadowsocksr
  10. uci_get_by_name() {
  11. local ret=$(uci get $NAME.$1.$2 2>/dev/null)
  12. echo ${ret:=$3}
  13. }
  14. uci_get_by_type() {
  15. local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null)
  16. echo ${ret:=$3}
  17. }
  18. server_process_count=$1
  19. redir_tcp_process=$2
  20. redir_udp_process=$3
  21. tunnel_process=$4
  22. kcp_process=$5
  23. local_process=$6
  24. pdnsd_process=$7
  25. if [ -z "$pdnsd_process" ]; then
  26. pdnsd_process=0
  27. fi
  28. i=0
  29. GLOBAL_SERVER=$(uci_get_by_type global global_server)
  30. server=$(uci_get_by_name $GLOBAL_SERVER server)
  31. lkcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port)
  32. server_port=$(uci_get_by_name $GLOBAL_SERVER server_port)
  33. password=$(uci_get_by_name $GLOBAL_SERVER kcp_password)
  34. kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param)
  35. [ "$password" != "" ] && password="--key "${password}
  36. if echo "$server" | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then
  37. server=${server}
  38. else
  39. server=$(cat /etc/ssr_ip)
  40. fi
  41. while [ "1" == "1" ]; do #死循环
  42. sleep 30
  43. #redir tcp
  44. if [ "$redir_tcp_process" -gt 0 ]; then
  45. icount=$(busybox ps -w | grep ssr-retcp | grep -v grep | wc -l)
  46. if [ "$icount" == 0 ]; then
  47. logger -t "$NAME" "ssr redir tcp error.restart!"
  48. /etc/init.d/shadowsocksr restart
  49. exit 0
  50. fi
  51. fi
  52. #redir udp
  53. if [ "$redir_udp_process" -gt 0 ]; then
  54. icount=$(busybox ps -w | grep ssr-reudp | grep -v grep | wc -l)
  55. if [ "$icount" == 0 ]; then
  56. logger -t "$NAME" "ssr redir udp error.restart!"
  57. /etc/init.d/shadowsocksr restart
  58. exit 0
  59. fi
  60. fi
  61. #tunnel
  62. if [ "$tunnel_process" -gt 0 ]; then
  63. icount=$(busybox ps -w | grep ssr-tunnel | grep -v grep | wc -l)
  64. if [ "$icount" == 0 ]; then
  65. logger -t "$NAME" "ssr tunnel error.restart!"
  66. /etc/init.d/shadowsocksr restart
  67. exit 0
  68. fi
  69. fi
  70. #server
  71. if [ "$server_process_count" -gt 0 ]; then
  72. icount=$(busybox ps -w | grep ssr-server | grep -v grep | wc -l)
  73. if [ "$icount" -lt "$server_process_count" ]; then #如果进程挂掉就重启它
  74. logger -t "$NAME" "ssr server error.restart!"
  75. kill -9 $(busybox ps -w | grep ssr-server | grep -v grep | awk '{print $1}') >/dev/null 2>&1
  76. /etc/init.d/shadowsocksr restart
  77. fi
  78. fi
  79. #kcptun
  80. if [ "$kcp_process" -gt 0 ]; then
  81. icount=$(busybox ps -w | grep kcptun-client | grep -v grep | wc -l)
  82. if [ "$icount" -lt "$kcp_process" ]; then #如果进程挂掉就重启它
  83. logger -t "$NAME" "ssr kcptun error.restart!"
  84. killall -q -9 kcptun-client
  85. (/usr/bin/kcptun-client -r $server:$kcp_port -l :$server_port $password $kcp_param &)
  86. fi
  87. fi
  88. #localsocks
  89. if [ "$local_process" -gt 0 ]; then
  90. icount=$(busybox ps -w | grep ssr-local | grep -v grep | wc -l)
  91. if [ "$icount" -lt "$local_process" ]; then #如果进程挂掉就重启它
  92. logger -t "$NAME" "global socks server error.restart!"
  93. kill -9 $(busybox ps -w | grep ssr-local | grep -v grep | awk '{print $1}') >/dev/null 2>&1
  94. /etc/init.d/shadowsocksr restart
  95. fi
  96. fi
  97. #pdnsd
  98. if [ "$pdnsd_process" -eq 1 ]; then
  99. icount=$(busybox ps -w | grep pdnsd | grep -v grep | wc -l)
  100. if [ "$icount" -lt "$pdnsd_process" ]; then #如果进程挂掉就重启它
  101. logger -t "$NAME" "pdnsd tunnel error.restart!"
  102. if [ -f /var/run/pdnsd.pid ]; then
  103. kill $(cat /var/run/pdnsd.pid) >/dev/null 2>&1
  104. else
  105. kill -9 $(ps | grep pdnsd | grep -v grep | awk '{print $1}') >/dev/null 2>&1
  106. fi
  107. (/usr/sbin/pdnsd -c /var/etc/pdnsd.conf -d &)
  108. fi
  109. fi
  110. #dns2socks
  111. if [ "$pdnsd_process" -eq 2 ]; then
  112. icount=$(busybox ps -w | grep -e ssr-dns -e dns2socks | grep -v grep | wc -l)
  113. if [ "$icount" -lt 2 ]; then #如果进程挂掉就重启它
  114. logger -t "$NAME" "dns2socks $dnsstr tunnel error.restart!"
  115. dnsstr=$(uci_get_by_type global tunnel_forward 8.8.4.4:53)
  116. dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}')
  117. dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}')
  118. killall -q -9 dns2socks
  119. kill -9 $(busybox ps -w | grep ssr-dns | grep -v grep | awk '{print $1}') >/dev/null 2>&1
  120. microsocks -i 127.0.0.1 -p 10802 ssr-dns >/dev/null 2>&1 &
  121. dns2socks 127.0.0.1:10802 $dnsserver:$dnsport 127.0.0.1:5335 -q >/dev/null 2>&1 &
  122. fi
  123. fi
  124. done