#!/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