start-relay.sh 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. usage() {
  4. cat <<'EOF'
  5. Usage: start-relay.sh <token>
  6. Options via env:
  7. MYNETSPEEDER_RELAY_HOST relay 监听地址,默认 0.0.0.0
  8. MYNETSPEEDER_RELAY_PORT relay 监听端口,默认 9009
  9. MYNETSPEEDER_INSTALL_DIR 安装目录,默认 /opt/mynetspeeder
  10. MYNETSPEEDER_USER 运行用户,默认 mynetspeeder
  11. EOF
  12. }
  13. LISTEN_HOST="${MYNETSPEEDER_RELAY_HOST:-0.0.0.0}"
  14. LISTEN_PORT="${MYNETSPEEDER_RELAY_PORT:-9009}"
  15. TOKEN="${MYNETSPEEDER_RELAY_TOKEN:-${1:-}}"
  16. INSTALL_DIR="${MYNETSPEEDER_INSTALL_DIR:-/opt/mynetspeeder}"
  17. INSTALL_PARENT="$(dirname "$INSTALL_DIR")"
  18. PACKAGE_NAME="$(basename "$INSTALL_DIR")"
  19. RUNTIME_USER="${MYNETSPEEDER_USER:-mynetspeeder}"
  20. PID_FILE="/var/run/mynetspeeder-relay.pid"
  21. LOG_FILE="/var/log/mynetspeeder-relay.log"
  22. if [[ $EUID -ne 0 ]]; then
  23. echo "need root"
  24. exit 1
  25. fi
  26. if [[ -z "$TOKEN" ]]; then
  27. usage
  28. exit 1
  29. fi
  30. if [[ ! -d "$INSTALL_DIR" ]]; then
  31. echo "install dir not found: $INSTALL_DIR"
  32. exit 1
  33. fi
  34. id -u "$RUNTIME_USER" >/dev/null 2>&1 || useradd --system --no-create-home --shell /usr/sbin/nologin "$RUNTIME_USER"
  35. mkdir -p /var/log
  36. : > "$LOG_FILE"
  37. chown "$RUNTIME_USER":"$RUNTIME_USER" "$LOG_FILE"
  38. pkill -f 'python3 -m mynetspeeder relay' || true
  39. runuser -u "$RUNTIME_USER" -- bash -lc "export PYTHONUNBUFFERED=1; export PYTHONPATH=${INSTALL_PARENT}; cd ${INSTALL_PARENT} && exec nohup python3 -m ${PACKAGE_NAME} relay --listen-host ${LISTEN_HOST} --listen-port ${LISTEN_PORT} --token ${TOKEN}" >>"$LOG_FILE" 2>&1 &
  40. RELAY_PID=$!
  41. echo "$RELAY_PID" > "$PID_FILE"
  42. sleep 1
  43. if ! ss -ln | grep -qE "[:.]${LISTEN_PORT}( |$)"; then
  44. echo "relay failed to listen on ${LISTEN_HOST}:${LISTEN_PORT}"
  45. tail -n 50 "$LOG_FILE" || true
  46. exit 1
  47. fi
  48. echo "relay started on ${LISTEN_HOST}:${LISTEN_PORT}"
  49. echo "pid file: $PID_FILE"
  50. echo "log file: $LOG_FILE"