磁盘空间清理脚本

磁盘空间清理脚本,仅供参照

这是一个用于清理磁盘数据的 Shell 脚本,主要功能是根据设定的规则删除指定目录中的文件。以下是脚本的大致解释:

  1. cacheRoot=/data:设置存储数据的根目录为 /data

  2. cleanDir=$cacheRoot/record:设置要清理的目录为 $cacheRoot/record

  3. trashBoxDir=$cacheRoot/.cache:设置回收站目录为 $cacheRoot/.cache

  4. cachecull=50:设置磁盘使用百分比的阈值,到达该阈值后开始清理数据。

  5. cacherun=80:设置磁盘使用百分比的最大阈值,超过该阈值后立即清理数据。

  6. count=0maxCout=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
今日推荐