|
@@ -42,14 +42,18 @@ echo "==> 4/5 服务器拉取(git pull,非 scp)+ 后端按需重启"
|
|
|
ssh -o BatchMode=yes "$SERVER" '
|
|
ssh -o BatchMode=yes "$SERVER" '
|
|
|
cd $HOME/hs-data && GIT_TERMINAL_PROMPT=0 git pull -q
|
|
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)
|
|
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
|
|
|
|
|
- # 等优雅退出彻底结束(避免 serve 脚本看到将死进程而误判在跑),再补 SIGKILL。
|
|
|
|
|
- for i in $(seq 1 20); do pgrep -f "uvicorn app.main:app" >/dev/null || break; sleep 0.5; done
|
|
|
|
|
|
|
+ # 仅当 apps/api 真的变了才重启(纯前端改动 uvicorn 实时读盘,不动它=不抖、不掉)。
|
|
|
|
|
+ if git diff --name-only "$before" "$after" | grep -q "^apps/api/"; then
|
|
|
|
|
+ echo "后端代码有更新 → 重启 uvicorn"
|
|
|
pkill -9 -f "uvicorn app.main:app" 2>/dev/null || true
|
|
pkill -9 -f "uvicorn app.main:app" 2>/dev/null || true
|
|
|
|
|
+ for i in $(seq 1 20); do ss -ltn 2>/dev/null | grep -q :8080 || break; sleep 0.5; done
|
|
|
|
|
+ cd $HOME/hs-api/apps/api
|
|
|
|
|
+ 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 &
|
|
|
|
|
+ sleep 3 # 让 setsid 在 ssh 关闭前完成 fork/exec,进程随后脱离会话存活
|
|
|
|
|
+ else
|
|
|
|
|
+ bash $HOME/serve-hs-api.sh # 未在跑则冷启动拉起;在跑则幂等退出
|
|
|
fi
|
|
fi
|
|
|
- bash $HOME/serve-hs-api.sh
|
|
|
|
|
echo pulled-ok
|
|
echo pulled-ok
|
|
|
'
|
|
'
|
|
|
|
|
|