#!/bin/bash 2 3# ========================= 4# 日志清理脚本 5# ========================= 6 7# 配置区 8LOG_DIR="/var/log/myapp" # 日志目录 9DAYS_TO_KEEP=7 # 保留最近 7 天的日志 10FILE_PATTERN="*.log" # 文件匹配模式(可改为 "*.out", "app-*.log" 等) 11DRY_RUN=false # true = 仅预览不删除;false = 实际删除 12CLEAN_LOG="/var/log/clean_logs.log" 13 14# 日志函数 15log() { 16 echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$CLEAN_LOG" 17} 18 19# 检查目录是否存在 20if [ ! -d "$LOG_DIR" ]; then 21 echo "错误:日志目录不存在: $LOG_DIR" 22 exit 1 23fi 24 25log "开始清理日志(保留 $DAYS_TO_KEEP 天)..." 26 27# 构建 find 命令 28CMD="find \"$LOG_DIR\" -name \"$FILE_PATTERN\" -type f -mtime +$DAYS_TO_KEEP" 29 30if [ "$DRY_RUN" = true ]; then 31 log "[DRY RUN] 以下文件将被删除:" 32 eval "$CMD" | while read -r file; do 33 echo " $file" 34 log " DRY-RUN: $file" 35 done 36 log "DRY RUN 结束,未执行实际删除。" 37else 38 deleted_count=0 39 while IFS= read -r -d '' file; do 40 if rm -f "$file"; then 41 log "已删除: $file" 42 ((deleted_count++)) 43 else 44 log "删除失败: $file" 45 fi 46 done < <(eval "$CMD -print0") 47 48 log "清理完成,共删除 $deleted_count 个文件。" 49fi 50 51exit 0