From 507632609d34679e7263c57f664b3e61dd29e9eb Mon Sep 17 00:00:00 2001 From: HomeDash Bot Date: Fri, 11 Sep 2026 20:30:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20=E5=8E=86=E5=8F=B2=E6=9D=A1?= =?UTF-8?q?=E6=95=B0=E5=AE=88=E5=8D=AB=E6=94=B9=E4=B8=BA=E4=B8=8E=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E5=89=8D=E5=AF=B9=E6=AF=94=EF=BC=8C=E8=80=8C=E4=B8=8D?= =?UTF-8?q?=E6=98=AF=E5=86=99=E6=AD=BB=E6=9D=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 写死 4 条会把「用户自己在后台删了几条记录」误判成部署失败(本轮实际发生), 同时又发现不了真正的丢数据。改成切换前读一次旧容器的条数,切换后要求 新容器 >= 旧值:同步接口只累加不删除,所以变小即为异常。 --- deploy/zd.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/deploy/zd.sh b/deploy/zd.sh index 5850ad7..833eec8 100755 --- a/deploy/zd.sh +++ b/deploy/zd.sh @@ -91,6 +91,10 @@ CONF_BAK="${PORTAL_CONF}.bak-${STAMP}" cp -a "$PORTAL_CONF" "$CONF_BAK" gzip -dc "$REMOTE_TAR" | docker load >/dev/null +# 记录切换前的历史条数,切换后用于对比(同步接口只累加不删除, +# 所以"变少"就是异常;写死条数则会把用户自己删记录误判成失败) +OLD_HIST=$(curl -s "http://127.0.0.1:${CUR_PORT}/admin/api/history" 2>/dev/null | grep -o '"url"' | wc -l) +OLD_HIST=${OLD_HIST:-0} docker inspect navi --format '{{range .Config.Env}}{{println .}}{{end}}' \ | grep -E '^(NAVI_ADMIN_TOKEN|NAVI_SYNC_TOKEN|SEARXNG_BASE_URL|DEBIAN_FRONTEND)=' > "/tmp/navi-${STAMP}.env" @@ -119,7 +123,9 @@ w200 "http://127.0.0.1:${NEW_PORT}/navi.js" # /search 会真正跑一次搜索:既确认 SearXNG 可用,也顺带把它预热, # 这样切过去之后用户不会撞上"nginx 就绪但 SearXNG 还在启动"的 502。 w200 "http://127.0.0.1:${NEW_PORT}/search?q=linux" -echo " 新容器全绿,开始切换上游" +HIST=$(curl -s "http://127.0.0.1:${NEW_PORT}/admin/api/history" | grep -o '"url"' | wc -l) +[ "$HIST" -ge "$OLD_HIST" ] || { echo "!! 历史条数从 $OLD_HIST 掉到 $HIST(疑似丢数据)" >&2; false; } +echo " 新容器全绿(历史 ${OLD_HIST} → ${HIST} 条),开始切换上游" sed "s#\\(${UPSTREAM_HOST//./\\.}\\s*http://127\\.0\\.0\\.1:\\)${CUR_PORT};#\\1${NEW_PORT};#" "$PORTAL_CONF" > /tmp/portal.conf.new # 关键:必须同 inode 覆写(cat > 而不是 sed -i / mv)。