博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【linux】监控磁盘情况并自动删除备份文件
阅读量:5953 次
发布时间:2019-06-19

本文共 2538 字,大约阅读时间需要 8 分钟。

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

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

代码:

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

#!/bin/bash#monitor available disk spacedir='/home/kzy/bakup'rm_date=30least_retain_date=7threshold=80SPACE=$(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 $cmdelse    echo "$SPACE% used!"fiecho "=======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 onudev            973M     0  973M   0% /devtmpfs           199M   26M  174M  13% /run/dev/sda1        19G   14G  4.3G  76% /tmpfs           992M  308K  992M   1% /dev/shmtmpfs           5.0M  4.0K  5.0M   1% /run/locktmpfs           992M     0  992M   0% /sys/fs/cgroupcgmfs           100K     0  100K   0% /run/cgmanager/fsnone            992M  2.6M  990M   1% /tmp/guest-gRYtRhtmpfs           199M   68K  199M   1% /run/user/123tmpfs           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=9b=3c=$(expr $a - $b)  #correct c=6 c=$(expr $a-$b)    #error c=9-3

注意一定要有空格

2.用()

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

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

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

 

5.字符串转命令eval

cmd="echo $a"eval $cmd

 

6.sed命令

参考:

 

7.查询文件修改时间 stat

参考:

stat  test.txt

 

转载地址:http://iuoxx.baihongyu.com/

你可能感兴趣的文章
多线程设计模式 - Future模式
查看>>
android清理缓存动画、天气APP、购物下单选择器、阅读APP、饿了么demo等源码
查看>>
驳《我不是很懂 Node.js 社区的 DRY 文化》
查看>>
《Spring In Action(第4版)》阅读总结(四)渲染Web视图
查看>>
CGI、PHP-CGI、FastCGI
查看>>
PhoneGap极光推送 cordova消息推送
查看>>
Subarray Sum Equals K
查看>>
preventDefault, stopPropagation, stopImmediatePropagation 三者的区别
查看>>
王下邀月熊_Chevalier的前端每周清单系列文章索引
查看>>
js设计模式之观察者模式和发布/订阅模式
查看>>
Mac上以太坊Geth环境安装
查看>>
基于Netty模拟解析Binlog
查看>>
零配置构建工具:parcel
查看>>
算法题解:找出包含给定字符的最小窗口(枚举的一般方法)
查看>>
lodash源码分析之baseFindIndex中的运算符优先级
查看>>
MySQL数据库规范及解读
查看>>
用 Go 构建一个区块链 -- Part 5: 地址
查看>>
vscode+sftp 开发模式环境的同步
查看>>
Web Storage 与cookies
查看>>
Android Gallery2技术分析
查看>>