#!/usr/bin/env bash # start.sh — 启动 Siemens RAGAS Web 服务(后台运行) # 前提:已执行过 deploy.sh(.venv 和依赖均已就绪) # 用法:bash start.sh set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # ── 颜色输出 ────────────────────────────────────────────────────── if [ -t 1 ]; then GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; CYAN='\033[0;36m'; NC='\033[0m' else GREEN=''; YELLOW=''; RED=''; CYAN=''; NC='' fi ok() { echo -e "${GREEN}[OK]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } err() { echo -e "${RED}[ERROR]${NC} $*" >&2; } echo "" echo -e "${CYAN}============================================================${NC}" echo -e "${CYAN} Siemens RAGAS Console — 启动服务${NC}" echo -e "${CYAN}============================================================${NC}" echo "" # 检查虚拟环境 if [ ! -f ".venv/bin/python" ]; then err "未找到 .venv,请先执行部署:bash deploy.sh" exit 1 fi PYTHON=".venv/bin/python" # 检查 .env if [ ! -f ".env" ]; then warn ".env 不存在,请先复制并编辑配置:" warn " cp .env.example .env && nano .env" fi if grep -q "your-api-key" .env 2>/dev/null; then warn ".env 中仍包含默认占位符,部分功能(评估执行)将不可用" fi # 检查是否已有运行中的进程 if [ -f ".server.pid" ]; then EXISTING_PID=$(cat .server.pid) if kill -0 "$EXISTING_PID" 2>/dev/null; then warn "服务已在运行 (PID=$EXISTING_PID),无需重复启动" warn "如需重启请先执行:bash stop.sh" exit 0 else # PID 文件残留,清理 rm -f .server.pid fi fi # 创建必要目录 mkdir -p logs # 端口检测 PORT=8800 if ss -tlnp 2>/dev/null | grep -q ":$PORT " || netstat -tlnp 2>/dev/null | grep -q ":$PORT "; then warn "端口 $PORT 已被占用,尝试 8801..." PORT=8801 if ss -tlnp 2>/dev/null | grep -q ":$PORT " || netstat -tlnp 2>/dev/null | grep -q ":$PORT "; then err "端口 8800 和 8801 均被占用,请手动指定端口:" err " .venv/bin/python webmain.py --host 0.0.0.0 --port " exit 1 fi fi # 后台启动 nohup "$PYTHON" webmain.py --host 0.0.0.0 --port "$PORT" >> logs/server.log 2>&1 & SERVER_PID=$! echo "$SERVER_PID" > .server.pid # 等待 3 秒验证进程存活 sleep 3 if kill -0 "$SERVER_PID" 2>/dev/null; then ok "服务已启动 (PID=$SERVER_PID)" echo "" echo -e "${CYAN} 访问地址: http://$(hostname -I | awk '{print $1}'):${PORT}${NC}" echo -e "${CYAN} 本机访问: http://127.0.0.1:${PORT}${NC}" echo -e "${CYAN} 查看日志: tail -f logs/server.log${NC}" echo -e "${CYAN} 停止服务: bash stop.sh${NC}" echo "" else err "服务启动失败,请查看日志:" err " tail -20 logs/server.log" rm -f .server.pid exit 1 fi