首页 > 代码库 > 【linux】监控磁盘情况并自动删除备份文件

【linux】监控磁盘情况并自动删除备份文件

背景:我有一个备份目录/home/kzy/bakup,会每天备份一些信息。随着日子一天天的过去,这个文件夹越来越大,终于把磁盘撑满了.....

需求:当磁盘占有率超过80%时自动删除该文件夹下最老的30天文件,但要至少保留最近7天的文件。

代码:

如下。(码了一整天啊,才把这么点代码给码出来啊!!!shell编程超级烂啊!!!连基本语法都要查啊!!!各种报错各种调啊!!!为什么我的水平这么烂!!!!!!)

#!/bin/bash
#monitor available disk space
dir=/home/kzy/bakup
rm_date=30
least_retain_date=7
threshold=80
SPACE=$(df -P| sed -n /\/$/p | gawk {print $5} | sed  s/%//)
cur_date=$(date "+%Y-%m-%d %H:%M:%S")
echo "==========$cur_date start=========="
if [ $SPACE -ge $threshold ]
then
    oldest_file=$(ls -alt| tail -1| gawk {print $9})
    oldest_date=$(stat $oldest_file| grep ^Modify| gawk {print$2}| sed s/-//g)
    cur_time=$(date +%s)
    oldest_time=$(date -d ${oldest_date} +%s)
    diff_time=$(($cur_time - $oldest_time))
    diff_date=$(($diff_time / 86400))
    remain_date=$least_retain_date
    if [ $(($diff_date-$rm_date)) -ge $least_retain_date ]
    then
    remain_date=$(expr $diff_date - $rm_date)
    fi
    cmd="find $dir -mtime +$remain_date -exec rm -rvf {} \;"
    echo "Space is use more than $threshold%! Rmove some tmp files!"
    echo $cmd
    echo "---detail---"
    eval $cmd
else
    echo "$SPACE% used!"
fi
echo "=======end======="

放在crontab里每天跑就行了,记得保留日志。

 

------------------------------------细节分割线-----------------------------------

下面,记录一下我学到的各种知识。

1.在我写了一个简单的if 语句后,不停报错Syntax error: “fi” unexpected (expecting “then”

原因:我是在windows下编写的代码,然后拖到linux下面跑的。由于两个平台的格式不同,windows下编辑的代码会有特殊字符,所以运行失败。

解决:在linux下安装dos2unix,运行

dos2unix monitor_disk.sh

后面的是要转换的文件名。

 

2. 查看磁盘使用情况 df命令

df -hP

结果

Filesystem      Size  Used Avail Use% Mounted on
udev            973M     0  973M   0% /dev
tmpfs           199M   26M  174M  13% /run
/dev/sda1        19G   14G  4.3G  76% /
tmpfs           992M  308K  992M   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           992M     0  992M   0% /sys/fs/cgroup
cgmfs           100K     0  100K   0% /run/cgmanager/fs
none            992M  2.6M  990M   1% /tmp/guest-gRYtRh
tmpfs           199M   68K  199M   1% /run/user/123
tmpfs           199M   76K  199M   1% /run/user/1000
/dev/sr0         71M   71M     0 100% /media/zhuwenqian/VMware Tools

参数说明:

-h : 已M、G等单位显示,更便于阅读

-P : 如果没有-P,则在文件路径过长时结果显示会分行,导致难以用脚本处理。加上-P可以保证不换行。

【linux】监控磁盘情况并自动删除备份文件