更新前先确认程序能导入,并延长健康检查等待。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-10-10 23:19:45 +08:00
parent f329f647c7
commit 9c5a2688f2
+19 -6
View File
@@ -200,16 +200,27 @@ fix_permissions() {
wait_until_ready() { wait_until_ready() {
local ready=0 local ready=0
local _i local _i
for _i in 1 2 3 4 5 6 7 8 9 10; do echo "等待服务监听 ${BIND_PORT} ..."
if curl -fsS "http://127.0.0.1:${BIND_PORT}/health" >/dev/null; then for ((_i = 1; _i <= 40; _i++)); do
if curl -fsS "http://127.0.0.1:${BIND_PORT}/health" >/dev/null 2>&1; then
ready=1 ready=1
break break
fi fi
sleep 1 sleep 1
done done
if [[ "${ready}" -ne 1 ]]; then if [[ "${ready}" -ne 1 ]]; then
echo "服务未在 10 秒内就绪。最近日志:" >&2 echo "服务未在 40 秒内就绪。状态和最近日志:" >&2
journalctl -u "${SERVICE_NAME}.service" -n 50 --no-pager >&2 || true systemctl status "${SERVICE_NAME}.service" --no-pager >&2 || true
journalctl -u "${SERVICE_NAME}.service" -n 80 --no-pager >&2 || true
return 1
fi
echo "健康检查通过:http://127.0.0.1:${BIND_PORT}/health"
}
verify_app() {
log "检查程序能否启动"
if ! /usr/sbin/runuser -u "${APP_USER}" -- bash -c "cd '${INSTALL_ROOT}' && exec '${INSTALL_ROOT}/.venv/bin/python' -c 'import app.main'"; then
echo "程序导入失败,没有重启服务。请把上面的报错发出来。" >&2
return 1 return 1
fi fi
} }
@@ -223,9 +234,10 @@ cmd_deploy() {
install_python_deps install_python_deps
fix_permissions fix_permissions
write_service write_service
verify_app || return 1
systemctl enable "${SERVICE_NAME}.service" systemctl enable "${SERVICE_NAME}.service"
systemctl restart "${SERVICE_NAME}.service" systemctl restart "${SERVICE_NAME}.service"
wait_until_ready wait_until_ready || return 1
log "部署完成" log "部署完成"
echo "监听地址:${BIND_HOST}:${BIND_PORT}" echo "监听地址:${BIND_HOST}:${BIND_PORT}"
echo "健康检查:curl http://127.0.0.1:${BIND_PORT}/health" echo "健康检查:curl http://127.0.0.1:${BIND_PORT}/health"
@@ -257,8 +269,9 @@ cmd_update() {
install_python_deps install_python_deps
fix_permissions fix_permissions
write_service write_service
verify_app || return 1
systemctl restart "${SERVICE_NAME}.service" systemctl restart "${SERVICE_NAME}.service"
wait_until_ready wait_until_ready || return 1
log "更新完成,配置和数据库已保留" log "更新完成,配置和数据库已保留"
} }