ssr-monitor 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. . $IPKG_INSTROOT/etc/init.d/shadowsocksr
  10. LOCK_FILE="/var/lock/ssr-monitor.lock"
  11. [ -f "$LOCK_FILE" ] && exit 2
  12. touch "$LOCK_FILE"
  13. server_process_count=$1
  14. redir_tcp_process=$2
  15. redir_udp_process=$3
  16. kcp_process=$4
  17. local_process=$5
  18. pdnsd_process=$6
  19. if [ -z "$pdnsd_process" ]; then
  20. pdnsd_process=0
  21. fi
  22. i=0
  23. GLOBAL_SERVER=$(uci_get_by_type global global_server)
  24. server=$(uci_get_by_name $GLOBAL_SERVER server)
  25. kcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port)
  26. server_port=$(uci_get_by_name $GLOBAL_SERVER server_port)
  27. password=$(uci_get_by_name $GLOBAL_SERVER kcp_password)
  28. kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param)
  29. [ "$password" != "" ] && password="--key "${password}
  30. while [ "1" == "1" ]; do #死循环
  31. sleep 000030s
  32. #redir tcp
  33. if [ "$redir_tcp_process" -gt 0 ]; then
  34. icount=$(busybox ps -w | grep ssr-retcp | grep -v grep | wc -l)
  35. if [ "$icount" == 0 ]; then
  36. logger -t "$NAME" "ssrplus redir tcp error.restart!"
  37. echolog "ssrplus redir tcp error.restart!"
  38. /etc/init.d/shadowsocksr restart
  39. exit 0
  40. fi
  41. fi
  42. #redir udp
  43. if [ "$redir_udp_process" -gt 0 ]; then
  44. icount=$(busybox ps -w | grep ssr-reudp | grep -v grep | wc -l)
  45. if [ "$icount" == 0 ]; then
  46. logger -t "$NAME" "ssrplus redir udp error.restart!"
  47. echolog "ssrplus redir udp error.restart!"
  48. /etc/init.d/shadowsocksr restart
  49. exit 0
  50. fi
  51. fi
  52. #server
  53. if [ "$server_process_count" -gt 0 ]; then
  54. icount=$(busybox ps -w | grep ssr-server | grep -v grep | wc -l)
  55. if [ "$icount" -lt "$server_process_count" ]; then #如果进程挂掉就重启它
  56. logger -t "$NAME" "ssrplus server error.restart!"
  57. echolog "ssrplus server error.restart!"
  58. kill -9 $(busybox ps -w | grep ssr-server | grep -v grep | awk '{print $1}') >/dev/null 2>&1
  59. /etc/init.d/shadowsocksr restart
  60. exit 0
  61. fi
  62. fi
  63. #kcptun
  64. if [ "$kcp_process" -gt 0 ]; then
  65. icount=$(busybox ps -w | grep kcptun-client | grep -v grep | wc -l)
  66. if [ "$icount" -lt "$kcp_process" ]; then #如果进程挂掉就重启它
  67. logger -t "$NAME" "ssrplus kcptun error.restart!"
  68. echolog "ssrplus kcptun error.restart!"
  69. killall -q -9 kcptun-client
  70. (/usr/bin/kcptun-client -r $server:$kcp_port -l :$server_port $password $kcp_param &)
  71. fi
  72. fi
  73. #localsocks
  74. if [ "$local_process" -gt 0 ]; then
  75. icount=$(busybox ps -w | grep ssr-local | grep -v grep | wc -l)
  76. if [ "$icount" -lt "$local_process" ]; then #如果进程挂掉就重启它
  77. logger -t "$NAME" "global socks server error.restart!"
  78. echolog "global socks server error.restart!"
  79. kill -9 $(busybox ps -w | grep ssr-local | grep -v grep | awk '{print $1}') >/dev/null 2>&1
  80. /etc/init.d/shadowsocksr restart
  81. exit 0
  82. fi
  83. fi
  84. #dns2tcp
  85. if [ "$pdnsd_process" -eq 1 ]; then
  86. icount=$(busybox ps -w | grep $TMP_BIN_PATH/dns2tcp | grep -v grep | wc -l)
  87. if [ "$icount" -lt 1 ]; then #如果进程挂掉就重启它
  88. logger -t "$NAME" "dns2tcp tunnel error.restart!"
  89. echolog "dns2tcp tunnel error.restart!"
  90. dnsstr=$(uci_get_by_type global tunnel_forward 8.8.4.4:53)
  91. dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}')
  92. dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}')
  93. kill -9 $(busybox ps -w | grep $TMP_BIN_PATH/dns2tcp | grep -v grep | awk '{print $1}') >/dev/null 2>&1
  94. ln_start_bin $(first_type dns2tcp) dns2tcp -L "127.0.0.1#$dns_port" -R "$dnsserver#$dnsport"
  95. fi
  96. #dns2socks
  97. elif [ "$pdnsd_process" -eq 2 ]; then
  98. icount=$(busybox ps -w | grep -e ssrplus-dns -e "dns2socks 127.0.0.1 $tmp_dns_port" | grep -v grep | wc -l)
  99. if [ "$icount" -lt 2 ]; then #如果进程挂掉就重启它
  100. logger -t "$NAME" "dns2socks $dnsstr tunnel error.restart!"
  101. echolog "dns2socks $dnsstr tunnel error.restart!"
  102. dnsstr=$(uci_get_by_type global tunnel_forward 8.8.4.4:53)
  103. dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}')
  104. dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}')
  105. kill -9 $(busybox ps -w | grep ssrplus-dns | grep -v grep | awk '{print $1}') >/dev/null 2>&1
  106. kill -9 $(busybox ps -w | grep "dns2socks 127.0.0.1 $tmp_dns_port" | grep -v grep | awk '{print $1}') >/dev/null 2>&1
  107. ln_start_bin $(first_type microsocks) microsocks -i 127.0.0.1 -p $tmp_dns_port ssrplus-dns
  108. ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_dns_port $dnsserver:$dnsport 127.0.0.1:$dns_port -q
  109. fi
  110. fi
  111. done