-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdev.sh
More file actions
121 lines (103 loc) · 3.96 KB
/
Copy pathdev.sh
File metadata and controls
121 lines (103 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/bash
# ============================================================
# PulseAgent 开发启动脚本
# 启动后端(dev 模式)+ 前端 + 实时日志监听
# ============================================================
set -e
PROJECT_ROOT="/Users/ryme/GolandProjects/PulseAgent"
GO_BIN="/Users/ryme/sdk/go1.24.12/bin/go"
# 颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'
LOG_DIR="$PROJECT_ROOT/deploy/logs"
mkdir -p "$LOG_DIR"
log_info() { echo -e "${GREEN}[✅ OK]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[⚠️ ]${NC} $1"; }
log_start() { echo -e "${CYAN}[🚀 ]${NC} $1"; }
# ============================================================
# 清理旧进程
# ============================================================
cleanup() {
echo ""
echo -e "${RED}🛑 收到退出信号,清理进程...${NC}"
# 杀掉本脚本启动的所有后台进程
kill $(jobs -p) 2>/dev/null || true
wait 2>/dev/null
log_info "所有进程已清理"
exit 0
}
trap cleanup SIGINT SIGTERM
# ============================================================
# 启动后端
# ============================================================
start_backend() {
log_start "编译并启动后端..."
# 检查端口
if lsof -i :6872 &>/dev/null; then
local pid=$(lsof -i :6872 -P -n 2>/dev/null | grep LISTEN | awk '{print $2}' | head -1)
log_warn "端口 6872 已被占用 (PID $pid),先杀掉..."
kill "$pid" 2>/dev/null || true
sleep 1
fi
cd "$PROJECT_ROOT"
GOPATH="$PROJECT_ROOT/.go" \
GOMODCACHE="$PROJECT_ROOT/.go/pkg/mod" \
$GO_BIN run main.go > "$LOG_DIR/backend.log" 2>&1 &
BACKEND_PID=$!
echo "$BACKEND_PID" > "$LOG_DIR/backend.pid"
# 等待启动
log_start "等待后端编译 + 启动(可能需要 10-30s)..."
for i in {1..30}; do
if curl -s http://localhost:6872/metrics &>/dev/null; then
log_info "后端已启动 → http://localhost:6872 (PID $BACKEND_PID)"
return 0
fi
sleep 1
done
log_warn "后端可能还在编译中,日志会实时显示"
}
# ============================================================
# 启动前端
# ============================================================
start_frontend() {
log_start "启动前端..."
local fe_port=8080
# 检查端口
while lsof -i :$fe_port &>/dev/null; do
local occupier=$(lsof -i :$fe_port -P -n 2>/dev/null | grep LISTEN | awk '{print $1}' | head -1)
if [[ "$occupier" == "python3" || "$occupier" == "Python" ]]; then
log_warn "前端已在端口 $fe_port 运行"
return 0
fi
log_warn "端口 $fe_port 被 $occupier 占用,尝试 $((fe_port + 1))..."
fe_port=$((fe_port + 1))
done
cd "$PROJECT_ROOT/PulseAgentFrontend"
eval "$(/Users/ryme/miniconda3/bin/conda shell.bash hook 2>/dev/null)"
python3 -m http.server $fe_port > "$LOG_DIR/frontend.log" 2>&1 &
FRONTEND_PID=$!
sleep 1
if lsof -i :$fe_port -P -n 2>/dev/null | grep -q LISTEN; then
log_info "前端已启动 → http://localhost:$fe_port (PID $FRONTEND_PID)"
else
log_warn "前端启动中..."
fi
}
# ============================================================
# 主逻辑
# ============================================================
echo ""
echo "🔥 PulseAgent 开发模式"
echo "════════════════════════════════════════"
start_backend
start_frontend
echo "════════════════════════════════════════"
echo ""
echo -e "${CYAN}📋 实时日志输出 (Ctrl+C 退出并停止所有服务)${NC}"
echo "────────────────────────────────────────"
echo ""
# 实时监听后端日志
tail -f "$LOG_DIR/backend.log" 2>/dev/null || wait