- 新增OKX WebSocket行情连接器,扩展4交易所价格监控 - 新增z-score趋势检测引擎(TrendDetector),识别价格异动/趋势启动 - 新增累积变动跟踪(CumulativeTracker),基于1min/5min多交易所共识 - 趋势事件和累积变动事件持久化到SQLite - 新增Binance/OKX动量检测字段,扩展前端动量卡片至15列 - 迁移至macOS(darwin-arm64),更新前端依赖 - Dashboard网格重构:非交易卡片置顶,交易卡片置底 - TrackedCoin添加OK字段,添加ExBinance/ExOKX常量 - 前端新增趋势检测卡片、趋势历史卡片、累积变动卡片 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
100 lines
2.6 KiB
Bash
Executable File
100 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# exchange-monitor 启动脚本
|
|
# 自动检测端口占用并清理旧进程
|
|
# 用法: ./start.sh [--clean] [--rebuild]
|
|
# --clean 删除数据库后重新启动(数据库重置)
|
|
# --rebuild 强制重编译(即使源码无变更)
|
|
|
|
set -e
|
|
|
|
cd "$(dirname "$0")"
|
|
PORT=8888
|
|
BIN="./exchange-monitor"
|
|
LOG="exchange-monitor.log"
|
|
GO_CMD="/home/jack/.local/go/bin/go"
|
|
|
|
# 解析参数
|
|
CLEAN_DB=false
|
|
FORCE_REBUILD=false
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--clean) CLEAN_DB=true ;;
|
|
--rebuild) FORCE_REBUILD=true ;;
|
|
esac
|
|
done
|
|
|
|
# 清理旧进程(pkill 按进程名匹配,不会匹配到 start.sh 自身)
|
|
OLD_PIDS=$(pgrep 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
|
|
# 强制清理
|
|
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
|
|
|
|
# 设置代理(Clash Verge 本地代理,用于 Binance/OKX/Bitget WS 连接)
|
|
# HyperLiquid 直连,无需代理
|
|
export HTTPS_PROXY=http://127.0.0.1:7897
|
|
export HTTP_PROXY=http://127.0.0.1:7897
|
|
export NO_PROXY="api.hyperliquid.xyz,hyperliquid.xyz,localhost,127.0.0.1"
|
|
|
|
# 编译
|
|
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
|
|
|
|
# 启动
|
|
echo "[start] 启动 exchange-monitor (端口 $PORT)..."
|
|
nohup "$BIN" >> "$LOG" 2>&1 &
|
|
PID=$!
|
|
echo "[start] PID=$PID"
|
|
|
|
# 等待就绪
|
|
for i in $(seq 1 10); do
|
|
if ss -tlnp 2>/dev/null | grep -q ":$PORT "; then
|
|
echo "[start] 就绪 (${i}s)"
|
|
echo "[start] http://localhost:$PORT"
|
|
exit 0
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
echo "[start] 启动超时(10s),请检查日志: tail -f $LOG"
|
|
exit 1
|