Просмотр исходного кода

fix(infra): 后端重启等优雅退出彻底结束再拉起(避免将死进程误判)+ serve-hs-api.sh 入仓

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tianyu.chu 1 месяц назад
Родитель
Сommit
10b1b99463
2 измененных файлов с 17 добавлено и 1 удалено
  1. 7 1
      infra/look.sh
  2. 10 0
      infra/serve-hs-api.sh

+ 7 - 1
infra/look.sh

@@ -42,7 +42,13 @@ echo "==> 4/5 服务器拉取(git pull,非 scp)+ 后端按需重启"
 ssh -o BatchMode=yes "$SERVER" '
   cd $HOME/hs-data && GIT_TERMINAL_PROMPT=0 git pull -q
   cd $HOME/hs-api && before=$(git rev-parse HEAD) && GIT_TERMINAL_PROMPT=0 git pull -q && after=$(git rev-parse HEAD)
-  if [ "$before" != "$after" ]; then echo "后端有更新 → 重启 uvicorn"; pkill -f "uvicorn app.main:app" || true; sleep 1; fi
+  if [ "$before" != "$after" ]; then
+    echo "后端有更新 → 重启 uvicorn"
+    pkill -f "uvicorn app.main:app" || true
+    # 等优雅退出彻底结束(避免 serve 脚本看到将死进程而误判在跑),再补 SIGKILL。
+    for i in $(seq 1 20); do pgrep -f "uvicorn app.main:app" >/dev/null || break; sleep 0.5; done
+    pkill -9 -f "uvicorn app.main:app" 2>/dev/null || true
+  fi
   bash $HOME/serve-hs-api.sh
   echo pulled-ok
 '

+ 10 - 0
infra/serve-hs-api.sh

@@ -0,0 +1,10 @@
+#!/bin/bash
+# hs-data 单进程服务:uvicorn 同源托管 SPA(STATIC_DIR=~/hs-data,实时读盘)+ /api,端口 8080。
+# 隔离 Python 3.11(~/miniconda3),不动系统环境。已在跑则退出(幂等);
+# 用 `setsid nohup ... </dev/null` 脱离 SSH 会话与控制终端,关掉会话也存活。
+# 注:此文件是 ~/serve-hs-api.sh 的仓库副本;部署链路不自动同步 infra → 服务器,
+#     改这里后需手动拷到服务器(见 docs/02 §10)。
+pgrep -f "uvicorn app.main:app" >/dev/null 2>&1 && exit 0
+cd "$HOME/hs-api/apps/api" || exit 1
+STATIC_DIR="$HOME/hs-data" setsid nohup "$HOME/miniconda3/bin/python" -m uvicorn app.main:app \
+  --host 0.0.0.0 --port 8080 >"$HOME/hs-api.log" 2>&1 </dev/null &