| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/usr/bin/env bash
- set -euo pipefail
- usage() {
- cat <<'EOF'
- Usage: start-relay.sh <token>
- Options via env:
- MYNETSPEEDER_RELAY_HOST relay 监听地址,默认 0.0.0.0
- MYNETSPEEDER_RELAY_PORT relay 监听端口,默认 9009
- MYNETSPEEDER_INSTALL_DIR 安装目录,默认 /opt/mynetspeeder
- MYNETSPEEDER_USER 运行用户,默认 mynetspeeder
- EOF
- }
- LISTEN_HOST="${MYNETSPEEDER_RELAY_HOST:-0.0.0.0}"
- LISTEN_PORT="${MYNETSPEEDER_RELAY_PORT:-9009}"
- TOKEN="${MYNETSPEEDER_RELAY_TOKEN:-${1:-}}"
- INSTALL_DIR="${MYNETSPEEDER_INSTALL_DIR:-/opt/mynetspeeder}"
- INSTALL_PARENT="$(dirname "$INSTALL_DIR")"
- PACKAGE_NAME="$(basename "$INSTALL_DIR")"
- RUNTIME_USER="${MYNETSPEEDER_USER:-mynetspeeder}"
- PID_FILE="/var/run/mynetspeeder-relay.pid"
- LOG_FILE="/var/log/mynetspeeder-relay.log"
- LOG_MAX_MB="${MYNETSPEEDER_LOG_MAX_MB:-50}"
- LOG_BACKUPS="${MYNETSPEEDER_LOG_BACKUPS:-3}"
- if [[ $EUID -ne 0 ]]; then
- echo "need root"
- exit 1
- fi
- if [[ -z "$TOKEN" ]]; then
- usage
- exit 1
- fi
- if [[ ! -d "$INSTALL_DIR" ]]; then
- echo "install dir not found: $INSTALL_DIR"
- exit 1
- fi
- id -u "$RUNTIME_USER" >/dev/null 2>&1 || useradd --system --no-create-home --shell /usr/sbin/nologin "$RUNTIME_USER"
- mkdir -p /var/log
- touch "$LOG_FILE"
- chown "$RUNTIME_USER":"$RUNTIME_USER" "$LOG_FILE"
- if ! [[ "$LOG_MAX_MB" =~ ^[0-9]+$ ]] || ! [[ "$LOG_BACKUPS" =~ ^[0-9]+$ ]]; then echo "log limits must be numeric"; exit 1; fi
- LOG_MAX_BYTES=$((LOG_MAX_MB * 1024 * 1024))
- pkill -f 'python3 -m mynetspeeder relay' || true
- 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} 2>&1 | python3 ${INSTALL_DIR}/scripts/rotate-log.py ${LOG_FILE} ${LOG_MAX_BYTES} ${LOG_BACKUPS}" &
- RELAY_PID=$!
- echo "$RELAY_PID" > "$PID_FILE"
- sleep 1
- if ! ss -ln | grep -qE "[:.]${LISTEN_PORT}( |$)"; then
- echo "relay failed to listen on ${LISTEN_HOST}:${LISTEN_PORT}"
- tail -n 50 "$LOG_FILE" || true
- exit 1
- fi
- echo "relay started on ${LISTEN_HOST}:${LISTEN_PORT}"
- echo "pid file: $PID_FILE"
- echo "log file: $LOG_FILE"
- echo "log max: ${LOG_MAX_MB}MB x ${LOG_BACKUPS}"
|