日志自动清理与归档脚本

代码脚本 · 其他

自动清理指定目录下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
日志清理归档Shell磁盘

更多其他