diff --git a/start.sh b/start.sh index 99d1638..e1ddf26 100755 --- a/start.sh +++ b/start.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash # exchange-monitor 启动脚本 # 自动检测端口占用并清理旧进程 +# 用法: ./start.sh [--clean] [--rebuild] +# --clean 删除数据库后重新启动(数据库重置) +# --rebuild 强制重编译(即使源码无变更) set -e @@ -8,33 +11,68 @@ cd "$(dirname "$0")" PORT=8888 BIN="./exchange-monitor" LOG="exchange-monitor.log" +GO_CMD="/home/jack/.local/go/bin/go" -# 检查端口占用,释放旧进程 -PID=$(ss -tlnp 2>/dev/null | grep ":$PORT " | sed -n 's/.*pid=\([0-9]*\).*/\1/p') -if [ -n "$PID" ]; then - echo "[start] Port $PORT 被 PID=$PID 占用,尝试优雅停止..." - kill "$PID" 2>/dev/null || true +# 解析参数 +CLEAN_DB=false +FORCE_REBUILD=false +for arg in "$@"; do + case "$arg" in + --clean) CLEAN_DB=true ;; + --rebuild) FORCE_REBUILD=true ;; + esac +done + +# 清理旧进程(通过进程名而非端口,更可靠) +OLD_PIDS=$(pgrep -f exchange-monitor 2>/dev/null || true) +if [ -n "$OLD_PIDS" ]; then + echo "[start] 停止旧进程 PID=$OLD_PIDS..." + kill $OLD_PIDS 2>/dev/null || true sleep 1 # 强制清理 - if kill -0 "$PID" 2>/dev/null; then - echo "[start] 强制终止 PID=$PID..." - kill -9 "$PID" 2>/dev/null || true + STILL_RUNNING=$(pgrep -f exchange-monitor 2>/dev/null || true) + if [ -n "$STILL_RUNNING" ]; then + echo "[start] 强制终止..." + kill -9 $STILL_RUNNING 2>/dev/null || true sleep 1 fi fi +# 可选:删除数据库 +if [ "$CLEAN_DB" = true ]; then + DB_PATH="$HOME/Project/exchange-monitor-go/data/trades.db" + if [ -f "$DB_PATH" ]; then + echo "[start] 删除数据库: $DB_PATH" + rm -f "$DB_PATH" + else + echo "[start] 数据库不存在,跳过" + fi +fi + +# 编译 +NEED_BUILD=false +if [ ! -x "$BIN" ]; then + NEED_BUILD=true +elif [ "$FORCE_REBUILD" = true ]; then + NEED_BUILD=true +elif [ -n "$(find . -name '*.go' -newer "$BIN" 2>/dev/null | head -1)" ]; then + NEED_BUILD=true +elif [ -n "$(find web/static -newer "$BIN" 2>/dev/null | head -1)" ]; then + NEED_BUILD=true +fi + +if [ "$NEED_BUILD" = true ]; then + echo "[start] 编译新二进制..." + $GO_CMD build -o "$BIN" . 2>&1 + echo "[start] 编译完成" +fi + # 确认端口空闲 if ss -tlnp 2>/dev/null | grep -q ":$PORT "; then echo "[start] ERROR: 端口 $PORT 仍被占用,放弃启动" exit 1 fi -# 编译(如果源码或嵌入文件有变更) -if [ ! -x "$BIN" ] || [ -n "$(find . -name '*.go' -newer "$BIN" 2>/dev/null | head -1)" ] || [ -n "$(find web/static -newer "$BIN" 2>/dev/null | head -1)" ]; then - echo "[start] 编译新二进制..." - go build -o "$BIN" . 2>&1 -fi - # 启动 echo "[start] 启动 exchange-monitor (端口 $PORT)..." nohup "$BIN" >> "$LOG" 2>&1 &