【linux】监控磁盘情况并自动删除备份文件
背景:我有一个备份目录/home/kzy/bakup,会每天备份一些信息。随着日子一天天的过去,这个文件夹越来越大,终于把磁盘撑满了.....
需求:当磁盘占有率超过80%时自动删除该文件夹下最老的30天文件,但要至少保留最近7天的文件。
代码:
如下。(码了一整天啊,才把这么点代码给码出来啊!!!shell编程超级烂啊!!!连基本语法都要查啊!!!各种报错各种调啊!!!为什么我的水平这么烂!!!!!!)
#!/bin/bash
#monitor available disk space
dir='/home/kzy/bakup'
rm_date=
least_retain_date=
threshold=
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 -| 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 / ))
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 973M % /dev
tmpfs 199M 26M 174M % /run
/dev/sda1 19G 14G .3G % /
tmpfs 992M 308K 992M % /dev/shm
tmpfs 5.0M .0K 5.0M % /run/lock
tmpfs 992M 992M % /sys/fs/cgroup
cgmfs 100K 100K % /run/cgmanager/fs
none 992M 2.6M 990M % /tmp/guest-gRYtRh
tmpfs 199M 68K 199M % /run/user/
tmpfs 199M 76K 199M % /run/user/
/dev/sr0 71M 71M % /media/zhuwenqian/VMware Tools
参数说明:
-h : 已M、G等单位显示,更便于阅读
-P : 如果没有-P,则在文件路径过长时结果显示会分行,导致难以用脚本处理。加上-P可以保证不换行。
相关命令:查看文件夹占用磁盘空间大小 du -h
3. ls结果按时间排序
ls -alt
如上,加个-t参数就行了
4.变量算数运算
1.用expr
a=
b=
c=$(expr $a - $b) #correct c=6
c=$(expr $a-$b) #error c=9-3
注意一定要有空格
2.用()
a=
b=
d=$(($a - $b)) #correct d=
d=$(($a-$b)) #correct d=
比较推荐第二种,写法,不用担心空格。
注,最外面的$()表示执行命令,里面的($a-$b)是运算式
5.字符串转命令eval
cmd="echo $a"
eval $cmd
6.sed命令
7.查询文件修改时间 stat
参考:http://blog.csdn.net/zyz511919766/article/details/14452027
stat test.txt
【linux】监控磁盘情况并自动删除备份文件的更多相关文章
- backup4:数据库自动备份,自动删除备份文件
一:手写TSQL 脚本 1,自动备份 每周进行一次Database 的 Full Backup,设置 Schedule Interval 为Weekly use master go ) )+N'.ba ...
- LINUX学习 - 磁盘分区 + 开机自动挂载 + 性能测试
在看鸟哥linux私房菜,发现不少有趣的东西,真是相见恨晚. 情境:建立一个新的filesystem挂在/srv/myproject目录下,并让其开机自动挂载到目录,该目录给project群组共享,其 ...
- [Linux监控]磁盘空间大小
echo 192.168.10.69>>ip.list ------------------------------------------- #!/bin/bash #注意if和[]之间 ...
- SQL 维护计划(自动删除备份文件)
--开启修改配置功能 exec sp_configure 'allow updates', 0 --启用功能 sp_configure 'xp_cmdshell',1; reconfigure --临 ...
- Linux系统磁盘分区、删除分区、格式化、挂载、卸载、开机自动挂载的方法总结
Linux系统按照MBR(Master Boot Record)传统分区模式: 注意:传统的MBR(Master Boot Record)分区方式最大只能分2T容量的硬盘,超过2T的硬盘一般采用GPT ...
- linux自动删除30天前的日志文件
linux应用总结: 自动删除n天前的日志文件: . 使用的命令格式如下: find 对应目录 -mtime +天数 -name "文件名" -exec -rm -rf -name ...
- linux实现shell脚本监控磁盘内存达到阈值时清理catalina.out日志
想在服务器上写一个shell脚本,在磁盘使用率达到80%时,自动清理掉一些没有用的日志文件,根据这个想法,在生产环境上写了一个以下脚本,按照该流程,可实现在linux环境做一个定时任务来执行shell ...
- Zabbix 自动发现并监控磁盘IO、报警 引言
引言 Zabbix并没有提供模板来监控磁盘的IO性能,所以我们需要自己来创建一个,由于一台服务器中磁盘众多,如果只有一两台可以手动添加,但服务集群达到几十那就非常麻烦,因此需要利用自动发现这个功能,自 ...
- 如何在Linux中自动删除或清理/tmp文件夹内容?
每个Linux系统都有一个名为的目录/tmp,该目录已挂载了单独的文件系统. 它具有称为tmpfs的特殊文件系统.这是一个虚拟文件系统,操作系统将在系统引导时自动挂载/tmp挂载点. 如果要根据应用程 ...
随机推荐
- JDK8新特性,方法的引用
引用方法并运行 在Java中,方法和构造方法都看作是对象的一种,那么你要引用它(不是调用),则可以用::来引用.用来存储这个引用的类型用@FunctionlaInterface注解来标识. 示例: p ...
- 【转】AD转换中常用的十种数字滤波法
在AD采集中经常要用到数字滤波,而不同情况下又有不同的滤波需求,下面是10种经典的软件滤波方法的程序和优缺点分析: 限幅滤波法(又称程序判断滤波法) 中位值滤波法 算术平均滤波法 递推平均滤波法(又称 ...
- LANMP环境编译参数查看方法
nginx编译参数查看:/usr/local/nginx/sbin/nginx -V apache编译参数查看:cat /usr/local/apache2/build/config.nice mys ...
- 如何解决eclipse、MyEclipse中变量名自动补全问题
背景:这个问题困扰了很长时间,解决过程也并不顺利.不断的试错,再次让我理解这下面这句话—— 世界上对的路可能只有一条,错的路却可能有成千上万条,不要成为别人的前车之鉴.开发之路,只需要记住对的路就行了 ...
- 样本服从正态分布,证明样本容量n乘样本方差与总体方差之比服从卡方分布x^2(n)
样本服从正态分布,证明样本容量n乘样本方差与总体方差之比服从卡方分布x^2(n) 正态分布的n阶中心矩参见: http://www.doc88.com/p-334742692198.html
- C++原型模式和模板模式
DP书上的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.其中有一个词很重要,那就是拷贝.可以说,拷贝是原型模式的精髓所在.举个现实中的例子来介绍原型模式.找工作的时候,我们需 ...
- Nginx配置——区分PC或手机访问不同域名以及http跳转https
新官网上线,但在手机上访问新官网的体验很差,要求在手机上访问新官网时访问旧官网,可以通过修改Nginx配置来实现自动跳转.首先是新官网的Nginx配置文件加个跳转判断,通过user-agent判断来源 ...
- sqlserver收缩日志的几种方式
sqlserver收缩日志的几种方式 [sql] --参考 压缩日志及数据库文件大小 /*--特别注意 请按步骤进行,未进行前面的步骤,请不要做后面的步骤 否则可 ...
- 冒泡排序与选择排序(经典版)----java基础总结
前言:关于冒泡排序和选择排序,每次写的时候都要再看看他们的概念,这次,就自己写明白 1.冒泡排序: 其实冒泡排序应该用例子证明,设数组长度为N. 1.比较相邻的前后二个数据,如果前面数据大于后面的数据 ...
- win下jdk7环境变量的配置
win下jdk7环境变量的配置: 单击计算机(Computer),选择属性(Properties),选择高级系统设置(Advanced systems settings), 选择环境变量(Enviro ...