ディスクスペースクリーンアップスクリプト

ディスク領域のクリーンアップ スクリプト (参照のみ)

これはディスクデータをクリーンアップするために使用されるシェルスクリプトであり、その主な機能は、設定されたルールに従って指定されたディレクトリ内のファイルを削除することです。スクリプトの大まかな説明は次のとおりです。

  1. cacheRoot=/data: データを保存するルート ディレクトリを設定します/data

  2. cleanDir=$cacheRoot/record: クリーンアップするディレクトリを として設定します$cacheRoot/record

  3. trashBoxDir=$cacheRoot/.cache: ごみ箱ディレクトリを に設定します$cacheRoot/.cache

  4. cachecull=50: ディスク使用率のしきい値を設定し、しきい値に達した後にデータのクリーニングを開始します。

  5. cacherun=80: ディスク使用率の最大しきい値を設定し、しきい値を超えた場合はすぐにデータをクリーンアップします。

  6. count=0およびmaxCout=144: 完全なクリーンアップ操作が実行される頻度を制御するために使用されるカウンターと最大カウント値を設定します。

  7. log_info(): 現在の時刻、ログの種類、内容などのログ情報を出力するために使用されるカスタム関数。

  8. detect_disk_usage(): ディスク使用量を検出し、結果を変数に保存しますusePecentage

  9. clean_trashbox(): ディレクトリ構造を作成し、ごみ箱ディレクトリを空にします。

  10. daily_check(): クリーンアップ操作は毎日実行され、30 日を超えたファイルはごみ箱ディレクトリに移動されます。

  11. clear_data(): 設定されたルールに従ってクリーニング操作を実行し、ディスク使用量のしきい値に達するまでファイルを一定の時間範囲内に保持し、ごみ箱ディレクトリに移動します。

  12. while true; do ... done &: クリーンアップ操作を無限ループで実行し、バックグラウンドで実行します。

スクリプトの実行フローは大まかに以下のとおりです。

  1. ディレクトリ構造とごみ箱ディレクトリを作成します。

  2. 完全なクリーニング操作を実行し、設定されたルールに従って対象となるファイルをごみ箱ディレクトリに移動します。

  3. ディスク使用量を確認し、しきい値を下回っている場合は、しばらく待ってから確認を続けます。

  4. ディスク使用量がしきい値を超えると、しきい値に達するまでクリーンアップ操作が再度実行されます。

  5. カウンタが最大値に達すると、完全なクリーンアップ操作が実行されます。

スクリプトは特定のニーズに合わせて作成される場合があり、関連するパスとルールは実際の状況に応じて調整する必要があることに注意してください。さらに、スクリプトは手動で停止されるかサーバーが再起動されるまで、バックグラウンド プロセスとして実行され続け、ディスク データを継続的に監視およびクリーニングします。

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

おすすめ

転載: blog.csdn.net/huapeng_guo/article/details/132165690