修复备份恢复路径处理

This commit is contained in:
yml
2026-06-18 12:12:16 +08:00
parent abe512b5f9
commit 142d27efea
+26
View File
@@ -6,6 +6,9 @@ COMPOSE_FILE="${ROOT_DIR}/deploy/docker-compose.prod.yml"
BACKEND_ENV="${ROOT_DIR}/backend/.env"
BACKUP_ROOT="${BACKUP_ROOT:-${ROOT_DIR}/backups}"
HELPER_IMAGE="${BACKUP_HELPER_IMAGE:-redis:7.4-alpine}"
if [[ "${BACKUP_ROOT}" != /* ]]; then
BACKUP_ROOT="${ROOT_DIR}/${BACKUP_ROOT}"
fi
RED='\033[0;31m'
GREEN='\033[0;32m'
@@ -36,6 +39,14 @@ need_cmd() {
fi
}
absolute_dir() {
local dir="$1"
(
cd "${dir}"
pwd -P
)
}
show_help() {
cat << EOF
用法: ./scripts/backup-prod.sh <命令> [选项]
@@ -416,6 +427,7 @@ restore_all() {
need_cmd docker
local backup_dir="$1"
local yes="$2"
local restore_ok=0
if [[ -z "${backup_dir}" || ! -d "${backup_dir}" ]]; then
log_error "备份目录不存在:${backup_dir}"
@@ -425,6 +437,18 @@ restore_all() {
log_error "restore 会覆盖当前生产数据库、MinIO、Redis、Caddy volume 和配置文件。确认执行请追加 --yes"
exit 1
fi
backup_dir="$(absolute_dir "${backup_dir}")"
restore_failure_cleanup() {
local exit_code=$?
trap - ERR
if [[ "${restore_ok}" != "1" ]]; then
log_warn "恢复失败,尝试启动当前配置下的服务,便于继续排查"
compose up -d || true
fi
exit "${exit_code}"
}
trap restore_failure_cleanup ERR
prepare_restore_env "${backup_dir}"
log_warn "即将从 ${backup_dir} 恢复,当前生产数据会被覆盖。"
@@ -439,6 +463,8 @@ restore_all() {
log "启动生产服务"
compose up -d
restore_ok=1
trap - ERR
log_success "恢复完成。建议立刻执行健康检查并抽查图片/二维码/订单数据。"
}