日志自动清理与归档脚本
自动清理指定目录下N天前的日志文件,压缩归档近期日志,防止磁盘被日志占满。
详细内容
#!/bin/bash
# 日志自动清理与归档脚本
# 使用方法: 修改配置后 bash log_cleanup.sh
# ========== 配置区 ==========
LOG_DIR="/var/log/myapp" # 日志目录
ARCHIVE_DIR="/backup/logs" # 归档目录
KEEP_DAYS=7 # 保留天数
COMPRESS_DAYS=3 # 超过几天的日志压缩
# ============================
mkdir -p $ARCHIVE_DIR
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始日志清理任务"
echo "日志目录: $LOG_DIR"
echo "保留天数: $KEEP_DAYS"
# 1. 压缩超过指定天数的日志
echo ""
echo "【1/3】压缩${COMPRESS_DAYS}天前的日志..."
find $LOG_DIR -name "*.log" -mtime +$COMPRESS_DAYS -not -name "*.gz" | while read file; do
gzip "$file"
echo " 已压缩: $file"
done
# 2. 归档超过保留天数的压缩日志
echo ""
echo "【2/3】归档${KEEP_DAYS}天前的日志..."
find $LOG_DIR -name "*.log.gz" -mtime +$KEEP_DAYS | while read file; do
filename=$(basename "$file")
mv "$file" "$ARCHIVE_DIR/${filename}_$(date +%Y%m%d)"
echo " 已归档: $file"
done
# 3. 删除归档目录中超过30天的文件
echo ""
echo "【3/3】清理归档目录中30天前的文件..."
find $ARCHIVE_DIR -name "*.gz*" -mtime +30 -delete -print
# 4. 显示磁盘使用
echo ""
echo "【磁盘使用情况】"
df -h $LOG_DIR | tail -1
echo ""
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 日志清理完成"
# ========== cron定时配置 ==========
# 每天凌晨2点执行:
# 0 2 * * * /path/to/log_cleanup.sh >> /var/log/log_cleanup.log 2>&1