#!/bin/bash # deploy/toggle_paper.sh —— 论文撰写快速开关(dev 树 175;不触碰生产 176 /srv/plantai)。 # 用法:bash deploy/toggle_paper.sh off|on # 原理:BFF main.py 按 PAPER_WRITER_ENABLED 决定是否注册 /api/paper 路由; # 不注册时 /api/paper/health 返回 404,前端探活落 offline,触发词落 docgen 单发降级。 set -uo pipefail ACTION="${1:-}" SDK_DIR="/home/xzq/5090/teamWorkspace/zh/PlantAI-rag-new/sdk" ENV_FILE="$SDK_DIR/.env" PY="/home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python" BIND="${PAPER_BFF_BIND:-0.0.0.0}" if [ "$ACTION" != "off" ] && [ "$ACTION" != "on" ]; then echo "用法: $0 " >&2 exit 2 fi VAL="true" [ "$ACTION" = "off" ] && VAL="false" # 1. 改 env(追加或覆盖) if grep -q "^PAPER_WRITER_ENABLED=" "$ENV_FILE"; then sed -i "s/^PAPER_WRITER_ENABLED=.*/PAPER_WRITER_ENABLED=$VAL/" "$ENV_FILE" else echo "PAPER_WRITER_ENABLED=$VAL" >> "$ENV_FILE" fi echo "PAPER_WRITER_ENABLED -> $VAL" # 2. 重启 BFF 8090(dev 树;仅取 LISTEN 者;venv 必须绝对路径,cd sdk 后才能 import app.main) kill $(lsof -ti tcp:8090 -sTCP:LISTEN) 2>/dev/null || true sleep 2 cd "$SDK_DIR" && set -a && . .env && set +a ( cd "$SDK_DIR" && setsid "$PY" -m uvicorn app.main:app --host "$BIND" --port 8090 \ > /tmp/plantai-bff.log 2>&1 < /dev/null & ) && disown -a # 3. 自检 for i in $(seq 1 20); do sleep 2 curl -s -m 3 http://127.0.0.1:8090/api/health >/dev/null 2>&1 && break done curl -s -m 10 http://127.0.0.1:8090/api/health | head -c 120 echo if [ "$ACTION" = "off" ]; then CODE=$(curl -s -o /dev/null -w "%{http_code}" -m 8 http://127.0.0.1:8090/api/paper/health) echo "paper/health HTTP $CODE (off 期望 404)" [ "$CODE" = "404" ] && echo "OFF_OK" || echo "OFF_CHECK_FAIL" else curl -s -m 8 http://127.0.0.1:8090/api/paper/health | head -c 150 echo fi