Linux备份日志文件脚本

#!/bin/bash
# 日志备份和压缩脚本
# 每天执行:备份昨天的日志
# 每周日执行:压缩上周的备份日志

set -e

# 配置参数
LOG_DIR="/logs/demo"
BACKUP_DIR="${LOG_DIR}/backup"

# 创建目录
mkdir -p ${BACKUP_DIR}
mkdir -p ${BACKUP_DIR}/weekly

# 获取日期
YESTERDAY=$(date -d "yesterday" +"%Y-%m-%d")
TODAY=$(date +"%Y-%m-%d")
DAY_OF_WEEK=$(date +"%u")   # 1=Monday, 7=Sunday

# 设置没有匹配时返回空数组(用于通配符匹配文件)
shopt -s nullglob

echo "[${TODAY}] 开始处理日志备份..."

# 1. 备份昨天的日志文件
cd ${LOG_DIR}
SOURCE_FILE=(*-"${YESTERDAY}".*.log)
if [ ${#SOURCE_FILE[@]} -gt 0 ]; then
    echo "备份昨日日志: ${SOURCE_FILE[@]} -> ${BACKUP_DIR}"
    cp -p ${SOURCE_FILE[@]} ${BACKUP_DIR}
    echo "[${TODAY}] 日志备份完成."
else
    echo "昨天[${YESTERDAY}]没有日志文件"
fi


# 2. 如果是周日(每周一次),压缩上周的备份日志
if [ "${DAY_OF_WEEK}" -eq 7 ]; then
    echo "今天是周日,执行每周压缩..."

    # 获取上周的日期范围
    LAST_WEEK_START=$(date -d "7 days ago" +"%Y-%m-%d")
    LAST_WEEK_END=$(date -d "1 day ago" +"%Y-%m-%d")

    # 创建压缩包文件名
    COMPRESS_FILE="${BACKUP_DIR}/weekly/demo-${LAST_WEEK_START}-to-${LAST_WEEK_END}.tar.gz"

    # 收集上周的所有备份日志文件
    cd ${BACKUP_DIR}
    FILES_TO_COMPRESS=()
    for i in {1..7}; do
        DATE=$(date -d "${i} days ago" +"%Y-%m-%d")

        # 查找该日期的所有日志文件
        MATCHED_FILES=(*-"${DATE}".*.log)
        if [ ${#MATCHED_FILES[@]} -gt 0 ]; then
            FILES_TO_COMPRESS+=("${MATCHED_FILES[@]}")
        fi
    done
    echo "压缩上周日志: ${FILES_TO_COMPRESS[@]}"
    tar -czf ${COMPRESS_FILE} "${FILES_TO_COMPRESS[@]}"
    echo "压缩完成."
fi

 

posted @ 2025-12-12 18:36  诚信天下  阅读(2)  评论(0)    收藏  举报