日志压缩与轮转需求:保留5天压缩日志及2天未压缩日志
日志压缩与清理解决方案
核心逻辑
- 保留最近2天的未压缩原始日志(
/user/var/logs/fw/下的当日及昨日日期文件夹) - 将第3~7天的日志文件夹压缩归档到备份目录(
/user/var/backup-logs/fw/),保留5天压缩日志 - 删除7天前的所有原始日志和备份压缩文件
实现脚本
创建/usr/local/bin/log-backup-clean.sh脚本,内容如下:
#!/bin/bash # 定义路径变量 SOURCE_LOG_DIR="/user/var/logs/fw" BACKUP_LOG_DIR="/user/var/backup-logs/fw" # 创建备份目录(不存在则自动创建) mkdir -p "${BACKUP_LOG_DIR}" # 1. 压缩第3~7天的日志文件夹(按日期名称精准匹配) for day_offset in {3..7}; do TARGET_DATE=$(date -d "${day_offset} days ago" +%Y-%m-%d) SOURCE_FOLDER="${SOURCE_LOG_DIR}/${TARGET_DATE}" # 仅当源文件夹存在且对应备份未生成时执行压缩 if [ -d "${SOURCE_FOLDER}" ] && [ ! -f "${BACKUP_LOG_DIR}/${TARGET_DATE}.tar.gz" ]; then tar -czf "${BACKUP_LOG_DIR}/${TARGET_DATE}.tar.gz" -C "${SOURCE_LOG_DIR}" "${TARGET_DATE}" # 若需压缩后立即删除原始文件夹,可取消下方注释 # rm -rf "${SOURCE_FOLDER}" fi done # 2. 删除7天前的原始日志文件夹 find "${SOURCE_LOG_DIR}" -type d -name "????-??-??" -mtime +7 -exec rm -rf {} \; # 3. 删除7天前的备份压缩文件 find "${BACKUP_LOG_DIR}" -type f -name "????-??-??.tar.gz" -mtime +7 -exec rm -f {} \;
脚本权限配置
给脚本添加可执行权限:
chmod +x /usr/local/bin/log-backup-clean.sh
Cron定时任务配置
编辑crontab设置每日自动执行:
crontab -e
添加以下内容(每天凌晨2点执行,日志输出到指定文件便于排查):
0 2 * * * /usr/local/bin/log-backup-clean.sh >> /var/log/log-backup-clean.log 2>&1
关键说明
- 脚本通过日期偏移量精准定位目标日志,避免误操作
- 使用
tar -C参数确保归档文件路径简洁,不包含冗余的源目录层级 - 原始日志默认保留至7天前再删除,若需压缩后立即清理原始文件,可取消脚本内对应注释
- 选择凌晨低峰期执行定时任务,避免影响业务运行
内容的提问来源于stack exchange,提问作者securityseeker
相关产品推荐
相关产品推荐

