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

摘要:
随着日子一天天的过去,这个文件夹越来越大,终于把磁盘撑满了.....需求:当磁盘占有率超过80%时自动删除该文件夹下最老的30天文件,但要至少保留最近7天的文件。由于两个平台的格式不同,windows下编辑的代码会有特殊字符,所以运行失败。解决:在linux下安装dos2unix,运行dos2unixmonitor_disk.sh后面的是要转换的文件名。

背景:我有一个备份目录/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可以保证不换行。

相关命令:查看文件夹占用磁盘空间大小 du -h

3. ls结果按时间排序

ls -alt

如上,加个-t参数就行了

4.变量算数运算

1.用expr

a=9
b=3
c=$(expr $a - $b)  #correct c=6
c=$(expr $a-$b) #error c=9-3

注意一定要有空格

2.用()

a=9
b=3
d=$(($a - $b))  #correct  d=6
d=$(($a-$b))   #correct  d=6

比较推荐第二种,写法,不用担心空格。

注,最外面的$()表示执行命令,里面的($a-$b)是运算式

5.字符串转命令eval

cmd="echo $a"
eval $cmd

6.sed命令

参考:http://man.linuxde.net/sed

7.查询文件修改时间 stat

参考:http://blog.csdn.net/zyz511919766/article/details/14452027

stat  test.txt

免责声明:文章转载自《【linux】监控磁盘情况并自动删除备份文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux服务器的Gzip文件压缩方法[转]Win10系统的SurfacePro4如何重装系统-1 SurfacePro专用的PE下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux随笔:安装软连接时:ln: failed to create symbolic link ‘/usr/bin/python3/python3’: File exists

在云服务上面安装python: 1.安装软连接时报:ln: failed to create symbolic link ‘/usr/bin/python3/python3’: File exists 2.解决方法:删除软连接 rm /usr/bin/python3 重新安装软连接:ln -s /root/python36/bin/python3 /usr...

SpringBoot全局时间date和localDateTime格式失效问题记录

一、出参处理springBoot项目中使用注解@ResponseBody或者@RestController默认使用Json格式返回数据。默认返回的格式是这样的"2021-04-28T07:01:45.000+00:00",如下 我们可能想要返回给前端是yyyy-MM-dd HH:mm:ss 这样的格式全局配置若此配置无效,返回的时间还是上面那种中间带‘T’...

linux下用/proc/stat文件来计算cpu的利用率-c语言实现

proc文件系统介绍       /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并...

在Linux服务器上运行Jupyter notebook server教程

在Linux服务器上运行Jupyter notebook server教程 很多deep learning教程都推荐在jupyter notebook运行python代码,方便及时交互。但只在本地运行没有GPU环境,虽然google colab是个好办法,但发现保存模型后在云端找不到模型文件,且需要合理上网才能访问。于是想给实验室的服务器配置jupyter...

linux netstat 命令详解

linux netstat 命令详解 1.功能与说明 netstat 用于显示linux中各种网络相关信息。如网络链接 路由表  接口状态链接 多播成员等等。 2.参数含义介绍 -a (all)显示所有选项,默认不显示LISTEN相关-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名,能显示数字的全部转化成数字...

linux系统统计某一字符出现的次数

1、创建测试数据 [root@linuxprobe test]# cat a.txt e i j s e f s d g e d d 2、利用grep命令统计字符e出现的次数 [root@linuxprobe test]# grep -o "e" a.txt | wc -l 3 3、同时统计e和d出现的次数 [root@linuxprobe test]#...