ディスク領域のクリーンアップ スクリプト (参照のみ)
これはディスクデータをクリーンアップするために使用されるシェルスクリプトであり、その主な機能は、設定されたルールに従って指定されたディレクトリ内のファイルを削除することです。スクリプトの大まかな説明は次のとおりです。
-
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"