Compare commits

..

3 Commits

Author SHA1 Message Date
Wang Defa
fe57dd33f4 feat: 添加备份过程的详细日志
改进内容:
- 在文件夹备份时显示排除规则和文件大小
- 在合并备份时显示每个文件的路径和大小
- 添加 tar 合并命令的错误检查
- 改进日志输出,便于调试和追踪问题

这些日志将帮助用户:
1. 确认排除规则是否正确应用
2. 检查每个备份文件的大小
3. 快速定位备份失败的原因
2025-12-25 15:45:11 +08:00
Wang Defa
8d558201a0 fix: 修复合并备份时的文件路径问题
问题描述:
- merge_backups 函数使用 basename 获取文件名
- 但文件实际在子目录中 (folders/folders.tar.gz, mysql/mysql.sql.gz)
- tar -C ${TEMP_DIR} 切换到临时目录后找不到文件

修复方案:
- 使用 ${path#${TEMP_DIR}/} 获取相对于临时目录的相对路径
- 正确构建文件列表传递给 tar 命令
- 确保 tar 能找到正确的文件路径

示例:
- 原: basename /tmp/xxx/folders/folders.tar.gz → folders.tar.gz (错误)
- 新: /tmp/xxx/folders/folders.tar.gz#/tmp/xxx/ → folders/folders.tar.gz (正确)
2025-12-25 15:42:13 +08:00
Wang Defa
1ea8d681ee fix: 修复日志输出干扰函数返回值的问题
问题描述:
- backup_folders() 和 backup_mysql() 函数使用 echo 返回文件路径
- 但 log_info 也输出到 stdout,导致主函数捕获了所有日志而非路径
- 最终 merge_backups 收到空参数,显示"没有需要打包的文件"

修复内容:
- 将所有日志输出重定向到 stderr (>&2)
- 简化 tar 命令的输出处理逻辑
- 确保函数返回值只包含文件路径

影响文件:
- bin/backup.sh - log() 函数添加 >&2 重定向
- bin/cleanup.sh - 所有 log 函数添加 >&2 重定向
2025-12-25 15:40:36 +08:00
2 changed files with 25 additions and 13 deletions

View File

@@ -33,7 +33,8 @@ log() {
local message="$@"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo -e "[${timestamp}] [${level}] ${message}"
# 输出到 stderr避免干扰函数返回值
echo -e "[${timestamp}] [${level}] ${message}" >&2
# 如果配置了日志文件,同时写入文件
if [[ -n "${LOG_FILE}" ]] && [[ "${LOGGING_ENABLED}" == "true" ]]; then
@@ -207,12 +208,10 @@ backup_folders() {
# 执行打包
log_info "开始打包文件夹..."
eval "tar -czf '${folders_tar}' ${exclude_args} ${tar_sources}" 2>&1 | while read line; do
log_info "$line"
done
if [[ -f "${folders_tar}" ]]; then
log_info "文件夹备份完成: ${folders_tar}"
log_info "排除规则: ${exclude_args}"
if eval "tar -czf '${folders_tar}' ${exclude_args} ${tar_sources}" 2>&1; then
local tar_size=$(du -h "${folders_tar}" | cut -f1)
log_info "文件夹备份完成: ${folders_tar} (大小: ${tar_size})"
echo "${folders_tar}"
else
log_error "文件夹备份失败"
@@ -320,9 +319,22 @@ merge_backups() {
fi
# 合并打包
tar -czf "${final_backup}" -C "${TEMP_DIR}" \
$(basename "${folders_tar}" 2>/dev/null || true) \
$(basename "${mysql_dump}" 2>/dev/null || true)
# 构建相对于 TEMP_DIR 的路径列表
local files_list=""
if [[ -n "${folders_tar}" ]] && [[ -f "${folders_tar}" ]]; then
files_list+=" ${folders_tar#${TEMP_DIR}/}"
log_info "添加到合并: ${folders_tar#${TEMP_DIR}/} ($(du -h "${folders_tar}" | cut -f1))"
fi
if [[ -n "${mysql_dump}" ]] && [[ -f "${mysql_dump}" ]]; then
files_list+=" ${mysql_dump#${TEMP_DIR}/}"
log_info "添加到合并: ${mysql_dump#${TEMP_DIR}/} ($(du -h "${mysql_dump}" | cut -f1))"
fi
log_info "执行合并打包..."
if ! tar -czf "${final_backup}" -C "${TEMP_DIR}" ${files_list} 2>&1; then
log_error "tar 合并命令执行失败"
return 1
fi
if [[ -f "${final_backup}" ]]; then
local file_size=$(du -h "${final_backup}" | cut -f1)

View File

@@ -25,15 +25,15 @@ NC='\033[0m'
###############################################################################
log_info() {
echo -e "${GREEN}[INFO]${NC} $@"
echo -e "${GREEN}[INFO]${NC} $@" >&2
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $@"
echo -e "${YELLOW}[WARN]${NC} $@" >&2
}
log_error() {
echo -e "${RED}[ERROR]${NC} $@"
echo -e "${RED}[ERROR]${NC} $@" >&2
}
###############################################################################