chore: 增强start.sh, 支持--clean清库/--rebuild强制编译
This commit is contained in:
@@ -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 &
|
||||
|
||||
Reference in New Issue
Block a user