From 15a46842080f5aff53e6b6e0d4be43a2342af9f1 Mon Sep 17 00:00:00 2001 From: jackyu66git Date: Mon, 4 May 2026 02:03:17 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=A2=9E=E5=BC=BAstart.sh,=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81--clean=E6=B8=85=E5=BA=93/--rebuild=E5=BC=BA?= =?UTF-8?q?=E5=88=B6=E7=BC=96=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- start.sh | 66 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 52 insertions(+), 14 deletions(-) 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 &