标签搜索

实用日志轮转清理脚本

mrui
2025-09-11 / 0 评论 / 2 阅读 / 正在检测是否收录...
#!/bin/bash
# 智能日志清理脚本

LOG_DIRS=("/var/log/nginx" "/var/log/apache2" "/var/log/myapp")
KEEP_DAYS=30
COMPRESS_DAYS=7

cleanup_logs() {
    local log_dir=$1
    
    if [ ! -d "$log_dir" ]; then
        echo "目录不存在: $log_dir"
        return
    fi
    
    echo "清理目录: $log_dir"
    
    # 压缩7天前的日志
    find "$log_dir" -name "*.log" -mtime +$COMPRESS_DAYS -not -name "*.gz" | while read logfile; do
        echo "压缩: $logfile"
        gzip "$logfile"
    done
    
    # 删除30天前的压缩日志
    local deleted_count=$(find "$log_dir" -name "*.log.gz" -mtime +$KEEP_DAYS -delete -print | wc -l)
    if [ $deleted_count -gt 0 ]; then
        echo "删除了 $deleted_count 个过期日志文件"
    fi
    
    # 清理空的日志文件
    find "$log_dir" -name "*.log" -size 0 -delete
    
    # 统计清理后的情况
    local total_size=$(du -sh "$log_dir" 2>/dev/null | awk '{print $1}')
    local file_count=$(find "$log_dir" -name "*.log*" | wc -l)
    echo "清理后: $file_count 个文件, 总大小 $total_size"
}

# 主程序
echo "=== 日志清理开始 $(date) ==="

for dir in "${LOG_DIRS[@]}"; do
    cleanup_logs "$dir"
    echo "---"
done

# 清理系统日志
echo "清理系统日志..."
journalctl --vacuum-time=30d --vacuum-size=1G

echo "=== 日志清理完成 $(date) ==="
0

评论 (0)

取消