【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可以保证不换行。

时间: 2024-10-13 05:55:32

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

[Linux监控]磁盘空间大小

echo 192.168.10.69>>ip.list ------------------------------------------- #!/bin/bash #注意if和[]之间的空格 rm -f ~/fanr/shell/DiskUsageAlert/out.print out=$(cat ~/fanr/shell/DiskUsageAlert/ip.list) echo $out for _IP in $out do ssh [email protected]$_IP df |

backup4:数据库自动备份,自动删除备份文件

一:手写TSQL 脚本 1,自动备份 每周进行一次Database 的 Full Backup,设置 Schedule Interval 为Weekly use master go declare @FileName nvarchar(256) set @FileName = N'D:\SQLBackupFolder\TestDB_FullBackup_'+CONVERT(nvarchar(max),getdate(),112)+N'.bak' BACKUP DATABASE [TESTDB]

利用tar进行完全备份、增量备份、差异备份,并控制版本号,自动删除备份文件

因业务需求,需对一个目录进行定期备份,现在使用tar进行自动备份,计划每周一次完整备份,其他每天进行增量或者差异备份,所以写出下面的脚步通过指定参数来选择备份模式.备份文件只保留最近两个完整备份版本和附属的增量或差异备份版本. [[email protected] script]# ./backup.sh          Please select the backup or delete mode,[full|diff|incr|delete|help] [[email protected]

LINUX学习 - 磁盘分区+开机自动挂载

在看鸟哥linux私房菜,发现不少有趣的东西,真是相见恨晚. 情境:建立一个新的filesystem挂在/srv/myproject目录下,并让其开机自动挂载到目录,该目录给project群组共享,其他人无任何权限,容量5G 目标:理解文件系统建置.自动挂载.权限分配 流程如下: 1. 使用fdisk /dev/sda 建立partition,根据英文提示,建立新的分区,最后w保存 2. 重启 3. 格式化: mkfs -t ext3 /dev/sda6 sda6就是那个新建的分区 4. 建立一

Linux监控磁盘大小的脚本

#!/bin/bash #monitor available disk spare SPACE=`df -h | sed -n '/\/$/p'|gawk '{print $5}'| sed -s 's/%/ /g'` if [ $SPACE -gt  30 ] then echo "192.168.2.2的磁盘空间不足30%,请管理员及时增加空间存储量" | mutt -s "192.168.2.2" [email protected] fi

Linux/Unix shell 脚本监控磁盘可用空间

Linux下监控磁盘的空闲空间的shell脚本,对于系统管理员或DBA来说,必不可少.下面是给出的一个监控磁盘空间空间shell脚本的样本,供大家参考. 1.监控磁盘的空闲空间shell脚本 [python] view plain copy print? [email protected]:~/dba_scripts/custom/bin> more ck_fs_space.sh #!/bin/bash # --------------------------------------------

Linux下监控磁盘使用量并在超过阀值后自动发送报警邮件

最近Linux服务器磁盘使用量经常到100%,直到影响到正常服务出现故障才会去注意,做不到防患于未然,今天在网上搜集了资料,加上自己修改,写了一个shell脚本用于实时监控磁盘使用量并在超过阀值后自动发送报警邮件. 脚本简单说明:用df命令查看磁盘使用量信息,超过脚本设置的阀值(critical=90)90%,就会自动用sendEmail命令发送报警邮件(邮件smtp.email等需自行修改成真实存在的). 1.首先下载监测脚本(点击下载)或直接复制下面脚本代码存为disk_check.sh文件

CMD批处理——forfiles命令使用,自动删除过期备份文件

公司服务器用来备份数据的硬盘过段时间就会被备份文件占满,弄得我老是要登录到服务器去手工删除那些老的文件,有时忘记了就会导致硬盘空间不足而无法备份.因为只要保留最近几天的备份,如果可以做一个批处理让系统自动删除老备份文件就好了,但是Windows的命令行和Linux的Shell比起来功能差了很多,到底行不行我自己也不清楚.于是上网查了一下各位大虾发的帖子,再经过自己的摸索和尝试,发现只要花点功夫还是能实现这个功能的.Windows Server 2003内置的命令行文件,适合于XP以上系统示例:

利用任务计划自动删除指定日期的SQLServer备份文件

利用任务计划自动删除指定日期的SQLServer备份文件 命令FORFILES [/P pathname] [/M searchmask] [/S]         [/C command] [/D [+ | -] {yyyy-MM-dd | dd}] 方法1:描述:可以删除7天以前的后缀名为log的日志文件.如今天是6.29,那么会删除6.22号以前创建的文件.不会删除到回收站.指定路径为要删除的文件夹路径,该批处理可以放在任意文件夹下.forfiles /p D:\aizzw\LOG /m