chore: 增强start.sh, 支持--clean清库/--rebuild强制编译
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# exchange-monitor 启动脚本
|
# exchange-monitor 启动脚本
|
||||||
# 自动检测端口占用并清理旧进程
|
# 自动检测端口占用并清理旧进程
|
||||||
|
# 用法: ./start.sh [--clean] [--rebuild]
|
||||||
|
# --clean 删除数据库后重新启动(数据库重置)
|
||||||
|
# --rebuild 强制重编译(即使源码无变更)
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
@@ -8,33 +11,68 @@ cd "$(dirname "$0")"
|
|||||||
PORT=8888
|
PORT=8888
|
||||||
BIN="./exchange-monitor"
|
BIN="./exchange-monitor"
|
||||||
LOG="exchange-monitor.log"
|
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')
|
CLEAN_DB=false
|
||||||
if [ -n "$PID" ]; then
|
FORCE_REBUILD=false
|
||||||
echo "[start] Port $PORT 被 PID=$PID 占用,尝试优雅停止..."
|
for arg in "$@"; do
|
||||||
kill "$PID" 2>/dev/null || true
|
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
|
sleep 1
|
||||||
# 强制清理
|
# 强制清理
|
||||||
if kill -0 "$PID" 2>/dev/null; then
|
STILL_RUNNING=$(pgrep -f exchange-monitor 2>/dev/null || true)
|
||||||
echo "[start] 强制终止 PID=$PID..."
|
if [ -n "$STILL_RUNNING" ]; then
|
||||||
kill -9 "$PID" 2>/dev/null || true
|
echo "[start] 强制终止..."
|
||||||
|
kill -9 $STILL_RUNNING 2>/dev/null || true
|
||||||
sleep 1
|
sleep 1
|
||||||
fi
|
fi
|
||||||
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
|
if ss -tlnp 2>/dev/null | grep -q ":$PORT "; then
|
||||||
echo "[start] ERROR: 端口 $PORT 仍被占用,放弃启动"
|
echo "[start] ERROR: 端口 $PORT 仍被占用,放弃启动"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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)..."
|
echo "[start] 启动 exchange-monitor (端口 $PORT)..."
|
||||||
nohup "$BIN" >> "$LOG" 2>&1 &
|
nohup "$BIN" >> "$LOG" 2>&1 &
|
||||||
|
|||||||
Reference in New Issue
Block a user