diff --git a/deploy/zd-host.sh b/deploy/zd-host.sh index 1e2979b..7c9925a 100644 --- a/deploy/zd-host.sh +++ b/deploy/zd-host.sh @@ -161,7 +161,8 @@ w200 "http://127.0.0.1:18080/admin" # 也可用 NAVI_CHECK_HOST 指定。apply 触发的 reload 是异步的,先等就绪。 CHECK_HOST="${NAVI_CHECK_HOST:-}" if [ -z "$CHECK_HOST" ]; then - CHECK_HOST=$(grep -m1 'host:' "$DATA_DIR/gateway.yml" 2>/dev/null | sed 's/.*host:[[:space:]]*//' | tr -d '"'"'"' | tr -d '\r') + # 只用无引号的字符类提取域名,避免 tr/sed 的引号嵌套把远端脚本打断 + CHECK_HOST=$(grep -m1 'host:' "$DATA_DIR/gateway.yml" 2>/dev/null | grep -oE '[A-Za-z0-9][A-Za-z0-9.-]*\.[A-Za-z]{2,}' | head -1 || true) fi [ -n "$CHECK_HOST" ] || { echo "!! 无法确定自检域名:请传 NAVI_CHECK_HOST=<某个已配置的域名>" >&2; false; } echo " 自检探测域名: $CHECK_HOST" @@ -218,6 +219,14 @@ docker rename navi-next navi trap - ERR docker rm -f "$PREV" >/dev/null 2>&1 || true rm -f "$REMOTE_TAR" +# 收尾断言:名字必须回到 navi。中途异常中断曾导致容器留在 navi-next, +# 而脚本"看起来"跑完了(本轮真实事故),所以这里显式检查。 +if ! docker inspect navi >/dev/null 2>&1; then + if docker inspect navi-next >/dev/null 2>&1; then + echo "!! 容器仍名为 navi-next(切换未收尾):已核验可直接 docker rename navi-next navi" >&2 + fi + false +fi echo "DEPLOY_OK tag=homedash:ui-${VER} mode=host health=$(docker inspect navi --format '{{if .State.Health}}{{.State.Health.Status}}{{else}}{{.State.Status}}{{end}}')" echo "闪断结束(旧容器已删除;镜像 ${OLD_IMAGE} 仍可用于手动回滚)" REMOTE