minimind/trainer_web/start_web_ui.sh

107 lines
3.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/bin/bash
# 获取脚本所在目录(兼容 macOS)
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
# 检查是否已经有实例在运行
if [ -f "train_web_ui.pid" ]; then
pid=$(cat "train_web_ui.pid")
if ps -p "$pid" > /dev/null 2>&1; then
echo "Web UI 服务已经在运行 (PID: $pid)"
exit 1
else
echo "删除旧的PID文件"
rm "train_web_ui.pid"
fi
fi
# 创建日志目录
LOG_DIR="../logfile"
mkdir -p "$LOG_DIR"
# 生成时间戳
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
LOG_FILE="$LOG_DIR/web_ui_$TIMESTAMP.log"
echo "启动 MiniMind Web UI 服务..."
echo "日志文件: $LOG_FILE"
# 使用nohup启动服务
nohup python -u train_web_ui.py > "$LOG_FILE" 2>&1 &
# 保存PID
pid=$!
echo $pid > "train_web_ui.pid"
# 检查进程是否成功启动
if ! ps -p "$pid" > /dev/null 2>&1; then
echo "错误: Web UI 服务启动失败,进程已不存在"
# 显示日志文件的最后几行以提供错误信息
if [ -f "$LOG_FILE" ]; then
echo "错误日志信息:"
tail -n 20 "$LOG_FILE"
fi
rm -f "train_web_ui.pid"
exit 1
fi
# 轮询日志以获取实际端口号并检查是否有错误(最多等待10秒)
PORT=""
START_TIME=$(date +%s)
MAX_WAIT_TIME=10
SUCCESS=false
while [ $(( $(date +%s) - $START_TIME )) -lt $MAX_WAIT_TIME ]; do
# 检查是否有错误信息
if grep -i "error\|exception\|failed\|traceback" "$LOG_FILE" > /dev/null 2>&1; then
echo "错误: Web UI 服务启动过程中出现错误"
echo "错误日志信息:"
grep -i "error\|exception\|failed\|traceback" "$LOG_FILE"
tail -n 20 "$LOG_FILE"
echo "请查看完整日志文件了解详细错误信息: $LOG_FILE"
rm -f "train_web_ui.pid"
kill $pid > /dev/null 2>&1
exit 1
fi
# 提取形如 http://0.0.0.0:12345 的地址,再截取端口
PORT=$(grep -Eo 'http://0\.0\.0\.0:[0-9]+' "$LOG_FILE" | tail -n1 | awk -F: '{print $NF}')
if [ -n "$PORT" ]; then
SUCCESS=true
break
fi
# 再次检查进程是否还在运行
if ! ps -p "$pid" > /dev/null 2>&1; then
echo "错误: Web UI 服务启动失败,进程已退出"
echo "错误日志信息:"
tail -n 20 "$LOG_FILE"
rm -f "train_web_ui.pid"
exit 1
fi
sleep 0.5
done
# 如果超时且没有找到端口
if [ "$SUCCESS" = false ]; then
# 再次检查进程是否还在运行
if ps -p "$pid" > /dev/null 2>&1; then
echo "警告: 无法在指定时间内确认服务是否完全启动"
# 如果仍未获取到端口,回退为默认提示端口(与后端起始端口一致)
PORT=12581
echo "服务可能已启动,但未能确认。请检查日志文件: $LOG_FILE"
else
echo "错误: Web UI 服务启动超时且进程已退出"
echo "错误日志信息:"
tail -n 20 "$LOG_FILE"
rm -f "train_web_ui.pid"
exit 1
fi
fi
echo "服务已成功启动! PID: $pid"
echo "访问地址: http://localhost:$PORT"
echo "停止命令: kill $pid or bash trainer_web/stop_web_ui.sh"