zoukankan      html  css  js  c++  java
  • 【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可以保证不换行。

    相关命令:查看文件夹占用磁盘空间大小 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
  • 相关阅读:
    ES5数组扩展
    ES5给object扩展的一些静态方法
    poj2531-dfs
    快排
    阶段性总结-贪心算法
    日常算法题
    poj1979 解题报告
    poj 2586
    poj3069
    poj2709 解题报告
  • 原文地址:https://www.cnblogs.com/dplearning/p/6347173.html
Copyright © 2011-2022 走看看