0
点赞
收藏
分享

微信扫一扫

清理日志脚本

青青子衿谈育儿 2023-06-05 阅读 40

#!/bin/bash

log_dir=/var/log
days_ago_default=90
min_space_percent=20

while true; do
    # 获取磁盘使用率和可用空间
    disk_info=$(df ${log_dir} | awk 'NR==2 {print $4,$5}')
    available_space=$(echo ${disk_info} | awk '{print $1}')
    used_percent=$(echo ${disk_info} | awk '{print $2}' | cut -d'%' -f1)

    if [ ${used_percent} -gt $((100 - ${min_space_percent})) ]; then
        # 如果磁盘使用率超过阈值,按照剩余空间删除日志文件
        while [ ${used_percent} -gt ${min_space_percent} ]; do
            oldest_log=$(find ${log_dir} -maxdepth 1 -type f -name "*.log" -mtime +${days_ago_default} -printf '%f\n' | sort -n | head -n 1)
            if [ -z "${oldest_log}" ]; then
                # 如果没有更多的日志文件可以删除了,则退出循环
                break
            fi

            echo "$(date) Deleting ${log_dir}/${oldest_log}"
            rm -f "${log_dir}/${oldest_log}"
            let days_ago_default--

            # 重新计算磁盘使用率
            disk_info=$(df ${log_dir} | awk 'NR==2 {print $4,$5}')
            available_space=$(echo ${disk_info} | awk '{print $1}')
            used_percent=$(echo ${disk_info} | awk '{print $2}' | cut -d'%' -f1)
        done
    else
        # 如果磁盘使用率低于阈值,默认删除90天之前的日志文件
        echo "$(date) Default policy: deleting logs older than ${days_ago_default} days"
        find ${log_dir} -type f -name "*.log" -mtime +${days_ago_default} -delete
    fi
done

举报

相关推荐

0 条评论