磁盘空间清理脚本,仅供参照
这是一个用于清理磁盘数据的 Shell 脚本,主要功能是根据设定的规则删除指定目录中的文件。以下是脚本的大致解释:
-
cacheRoot=/data
:设置存储数据的根目录为/data
。 -
cleanDir=$cacheRoot/record
:设置要清理的目录为$cacheRoot/record
。 -
trashBoxDir=$cacheRoot/.cache
:设置回收站目录为$cacheRoot/.cache
。 -
cachecull=50
:设置磁盘使用百分比的阈值,到达该阈值后开始清理数据。 -
cacherun=80
:设置磁盘使用百分比的最大阈值,超过该阈值后立即清理数据。 -
count=0
和maxCout=144
:设置计数器和最大计数值,用于控制每隔一段时间执行一次完整的清理操作。 -
log_info()
:自定义函数,用于打印日志信息,包括当前时间、日志类型和内容。 -
detect_disk_usage()
:检测磁盘使用情况,并将结果保存在变量usePecentage
中。 -
clean_trashbox()
:创建目录结构,清空回收站目录。 -
daily_check()
:每天执行的清理操作,将 30 天前的文件移动到回收站目录。 -
clear_data()
:根据设定的规则进行清理操作,保留一定时间范围内的文件并移动到回收站目录,直到满足磁盘使用阈值。 -
while true; do ... done &
:无限循环执行清理操作,并在后台运行。
脚本的执行流程大致如下:
-
创建目录结构和回收站目录。
-
执行一次完整的清理操作,根据设定的规则将符合条件的文件移动到回收站目录。
-
检测磁盘使用情况,如果低于阈值,则等待一段时间继续检测。
-
如果磁盘使用超过阈值,则再次执行清理操作,直到满足阈值。
-
当计数器达到最大值时,执行一次完整的清理操作。
请注意,该脚本可能是针对特定需求编写的,其中涉及到的路径和规则需要根据实际情况进行调整。另外,该脚本会以后台进程的方式一直运行,持续监测和清理磁盘数据,直到手动停止脚本或服务器重启。
#!/bin/bash
# Copyright
# author:
# file: clean_disk_data.sh
# desc: 校验分区的大小,优先删除30天之前的数据,依次删除,保留数据到1天,删除到阀值为50%
cacheRoot=/data
cleanDir=$cacheRoot/record
trashBoxDir=$cacheRoot/.cache
cachecull=50
cacherun=80
count=0
maxCout=144
function log_info()
{
echo $(date "+%Y-%m-%d %H:%M:%S") [INFO] $1 $2
}
function detect_disk_usage()
{
usePecentage=$(df -l | grep /data | head -n 1 | sed "s/%.*//g"|sed "s/.* //g")
log_info "usePecentage:" $usePecentage
if [ "$usePecentage" = "" ];then
usePecentage=0
fi
}
function clean_trashbox()
{
mkdir -p $cleanDir
mkdir -p $trashBoxDir
mkdir -p $cacheRoot
# mkdir -p $cacheRoot/.blank
# rsync --delete-before -d $cacheRoot/.blank/ $trashBoxDir
rm -rf $trashBoxDir/*
}
function daily_check()
{
log_info "daily_check begin"
find ${cleanDir} -maxdepth 1 ! -path ${cleanDir} -atime +30 -exec mv{} $trashBoxDir \;
clean_trashbox
log_info "daily_check end"
}
function clear_data()
{
log_info "clear_data begin"
#keep at leaset 3 days, once delete 3days
for((i=30;i>=3;i-=3));do
find ${cleanDir} -maxdepth 1 ! -path ${cleanDir} -atime +$i -exec mv{} $trashBoxDir \;
clean_trashbox
detect_disk_usage
if [ $usePecentage -lt $cachecull ];then
log_info "usePecentage:" $usePecentage
return
fi
done
#keep at leaset 1 days
if [ $usePecentage -gt $cachecull ];then
find ${cleanDir} -maxdepth 1 ! -path ${cleanDir} -atime +1 -exec mv{} $trashBoxDir \;
return
fi
clean_trashbox
log_info "daily_check end"
}
log_info "clean disk data begin"
clean_trashbox
clear_data
daily_check
while true; do
detect_disk_usage
if [ $usePecentage -lt $cachecull ];then
count=$((count+1))
sleep 600
else
clear_data
sleep 20
fi
if [ ${count} -ge ${maxCout} ];then
daily_check
count=0
fi
done &
log_info "clean disk data end"