udp_only_start.sh 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  4. ROOT_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")"
  5. PACKAGE_PARENT="$(dirname "$ROOT_DIR")"
  6. PACKAGE_NAME="$(basename "$ROOT_DIR")"
  7. source "$SCRIPT_DIR/runtime-lib.sh"
  8. CONFIG_PATH="${1:-$ROOT_DIR/config-udp.json}"
  9. RUNTIME_USER="${MYNETSPEEDER_UDP_USER:-mynetspeeder}"
  10. PID_FILE="/var/run/mynetspeeder-udp-socks.pid"
  11. LOG_FILE="/var/log/mynetspeeder-udp-socks.log"
  12. require_root
  13. if [[ ! -f "$CONFIG_PATH" ]]; then
  14. echo "config not found: $CONFIG_PATH"
  15. exit 1
  16. fi
  17. SOCKS_HOST_FROM_CONFIG="$(python3 - <<'PY' "$CONFIG_PATH"
  18. import json, sys
  19. cfg = json.load(open(sys.argv[1]))
  20. print(cfg.get("socks_host", "127.0.0.1"))
  21. PY
  22. )"
  23. SOCKS_PORT_FROM_CONFIG="$(python3 - <<'PY' "$CONFIG_PATH"
  24. import json, sys
  25. cfg = json.load(open(sys.argv[1]))
  26. port = int(cfg.get("socks_port", 19180) or 19180)
  27. print(port if port > 0 else 19180)
  28. PY
  29. )"
  30. SOCKS_HOST="${MYNETSPEEDER_UDP_SOCKS_HOST:-$SOCKS_HOST_FROM_CONFIG}"
  31. SOCKS_PORT="${MYNETSPEEDER_UDP_SOCKS_PORT:-$SOCKS_PORT_FROM_CONFIG}"
  32. if ! [[ "$SOCKS_PORT" =~ ^[0-9]+$ ]]; then
  33. echo "socks port must be numeric"
  34. exit 1
  35. fi
  36. ensure_runtime_user "$RUNTIME_USER"
  37. ensure_log_file "$LOG_FILE" "$RUNTIME_USER"
  38. stop_pid_file "$PID_FILE" "edge-udp --listen-host ${SOCKS_HOST} --listen-port ${SOCKS_PORT} --config ${CONFIG_PATH}"
  39. ARGV_JSON="$(python3 - <<'PY' "$PACKAGE_NAME" "$SOCKS_HOST" "$SOCKS_PORT" "$CONFIG_PATH"
  40. import json, sys
  41. package_name, listen_host, listen_port, config_path = sys.argv[1:]
  42. print(json.dumps([
  43. "python3", "-m", package_name, "edge-udp",
  44. "--listen-host", listen_host,
  45. "--listen-port", listen_port,
  46. "--config", config_path,
  47. ]))
  48. PY
  49. )"
  50. start_python_service "$RUNTIME_USER" "$PACKAGE_PARENT" "$PACKAGE_PARENT" "$LOG_FILE" "$PID_FILE" \
  51. "edge-udp --listen-host ${SOCKS_HOST} --listen-port ${SOCKS_PORT} --config ${CONFIG_PATH}" "$ARGV_JSON" >/dev/null
  52. if ! wait_for_tcp_listen "$SOCKS_HOST" "$SOCKS_PORT" 15; then
  53. tail -n 50 "$LOG_FILE" || true
  54. stop_pid_file "$PID_FILE" "edge-udp --listen-host ${SOCKS_HOST} --listen-port ${SOCKS_PORT} --config ${CONFIG_PATH}"
  55. exit 1
  56. fi
  57. echo "udp-only started on ${SOCKS_HOST}:${SOCKS_PORT}"