95 lines
3.0 KiB
Bash
95 lines
3.0 KiB
Bash
#!/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 <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
|