#!/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) ==="
版权属于:
mrui
评论 (0)