84 lines
3.4 KiB
Bash
84 lines
3.4 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# 须用 bash 执行;若误用 sh/dash 会自动改用 bash 再跑一遍
|
|||
|
|
[ -n "${BASH_VERSION:-}" ] || exec /usr/bin/env bash "$0" ${1+"$@"}
|
|||
|
|
# 一键启动全部 gangyan 服务:基础设施 -> 后端 -> 前端。
|
|||
|
|
# 每一步直接 source 已有的 *-restart.sh,保持单一事实来源。
|
|||
|
|
# 日志:gangyan/logs/start-all.log
|
|||
|
|
set -u
|
|||
|
|
source "$(cd "$(dirname "$0")" && pwd)/common-restart.sh"
|
|||
|
|
LOG_FILE="$LOG_DIR/start-all.log"
|
|||
|
|
|
|||
|
|
run_step() {
|
|||
|
|
local label="$1" script="$2"
|
|||
|
|
log_tee "━━━━━━━━ ${label} ━━━━━━━━"
|
|||
|
|
if [ ! -x "$SCRIPT_DIR/$script" ]; then
|
|||
|
|
log_tee "跳过: $script 不存在或不可执行"
|
|||
|
|
return 0
|
|||
|
|
fi
|
|||
|
|
bash "$SCRIPT_DIR/$script" 2>&1 | tee -a "$LOG_FILE"
|
|||
|
|
local rc=${PIPESTATUS[0]}
|
|||
|
|
[ "$rc" -eq 0 ] || log_tee "警告: $script 返回 $rc"
|
|||
|
|
return 0
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
port_check() {
|
|||
|
|
local port="$1" name="$2"
|
|||
|
|
if ss -tln 2>/dev/null | grep -qE ":${port}[[:space:]]"; then
|
|||
|
|
log_tee " [OK] ${name} :${port}"
|
|||
|
|
else
|
|||
|
|
log_tee " [!!] ${name} :${port} 未监听"
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
log_tee "╔══════════════════════════════════════╗"
|
|||
|
|
log_tee "║ gangyan 全量启动 $(date '+%F %H:%M:%S') ║"
|
|||
|
|
log_tee "╚══════════════════════════════════════╝"
|
|||
|
|
|
|||
|
|
# 1) 基础设施(Docker 容器:MySQL / Redis / Milvus)
|
|||
|
|
run_step "[1/5] MySQL" mysql-restart.sh
|
|||
|
|
run_step "[2/5] Redis" redis-restart.sh
|
|||
|
|
run_step "[3/5] Milvus" milvus-restart.sh
|
|||
|
|
|
|||
|
|
# 2) 应用层(langchain-chat 会顺带起 pdf-convert-service + log-trim daemon)
|
|||
|
|
run_step "[4/6] langchain-chat + pdf-convert + log-trim" langchain-restart.sh
|
|||
|
|
run_step "[5/6] Java 后端" backend-restart.sh
|
|||
|
|
run_step "[6/6] 前端 vite" frontend-restart.sh
|
|||
|
|
|
|||
|
|
# 3) 辅助进程状态(excalidraw-ai / pptist-ai 当前以 screen -dmS 管理,非脚本化;本脚本仅做健康检查)
|
|||
|
|
log_tee "━━━━━━━━ 辅助进程检查 ━━━━━━━━"
|
|||
|
|
if pgrep -f 'excalidraw-ai-proxy\.py' >/dev/null; then
|
|||
|
|
log_tee " [OK] excalidraw-ai-proxy.py (screen -dmS aiproxy)"
|
|||
|
|
else
|
|||
|
|
log_tee " [!!] excalidraw-ai-proxy.py 未运行。手动启: screen -dmS aiproxy bash -c 'cd $GANGYAN_ROOT/scripts && /opt/software/miniconda3/envs/langchain-chat/bin/python excalidraw-ai-proxy.py'"
|
|||
|
|
fi
|
|||
|
|
if pgrep -f 'pptist-ai-backend\.py' >/dev/null; then
|
|||
|
|
log_tee " [OK] pptist-ai-backend.py (screen -dmS pptist-ai)"
|
|||
|
|
else
|
|||
|
|
log_tee " [!!] pptist-ai-backend.py 未运行。手动启: screen -dmS pptist-ai bash -c 'cd $GANGYAN_ROOT/scripts && /opt/software/miniconda3/envs/langchain-chat/bin/python pptist-ai-backend.py'"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 4) 系统级 tools-nginx(systemd 管理,不在本脚本中重启)
|
|||
|
|
if systemctl is-active --quiet nginx 2>/dev/null; then
|
|||
|
|
log_tee " [OK] nginx (systemd, tools-nginx.conf -> :18000)"
|
|||
|
|
else
|
|||
|
|
log_tee " [!!] nginx 未运行。sudo systemctl start nginx"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 5) 端口自检
|
|||
|
|
log_tee "━━━━━━━━ 端口自检(等 5 秒) ━━━━━━━━"
|
|||
|
|
sleep 5
|
|||
|
|
port_check 3306 "MySQL (3306 映射)"
|
|||
|
|
port_check 33306 "MySQL (33306 映射)"
|
|||
|
|
port_check 6379 "Redis"
|
|||
|
|
port_check 19530 "Milvus gRPC"
|
|||
|
|
port_check 9091 "Milvus HTTP"
|
|||
|
|
port_check 7861 "langchain-chat API"
|
|||
|
|
port_check 6006 "pdf-convert-service"
|
|||
|
|
port_check 8099 "Java 后端"
|
|||
|
|
port_check 3000 "vite 前端"
|
|||
|
|
port_check 18000 "tools-nginx (工具集合)"
|
|||
|
|
|
|||
|
|
log_tee ""
|
|||
|
|
log_tee "完成。完整日志: $LOG_FILE"
|
|||
|
|
log_tee "访问: http://<server-ip>:3000/metalinfo"
|