shell脚本:定期删除日志文件

Posted fan2012huan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本:定期删除日志文件相关的知识,希望对你有一定的参考价值。

服务器中产生的日志有时会占满硬盘空间,因此需要定时对其清除。下面写了个脚本,实现删除上一个月的日志。
1.代码

#!/bin/bash

yy=`date +%Y`   #获取年
mm=`date +%m`   #获取月,如果是9月,得到的是09;如果是10月得到的是10
#mm=1
#echo $mm
if [ $mm -eq 1 ]   #如果是1月份,其前一月是前一年的12月份
then
    preYY=$(($yy-1))  
    preMM=12;
else
    preYY=$yy
    #preMM=$(($mm-1))
    preMM=`expr $mm - 1`  #由于有时是09,所以做减法必须要这么写,但是得到的结果却是8
fi
preMM=`printf %02d $preMM`  #由于上一步有可能得到一位数,所以需要前面补0,如08
#echo $preYY $preMM
#df -h
#文件系统        容量  已用  可用 已用% 挂载点
#/dev/sda5        46G   25G   19G   58% /
#none            4.0K     0  4.0K    0% /sys/fs/cgroup
#udev            1.9G  4.0K  1.9G    1% /dev
#tmpfs           385M  1.5M  383M    1% /run
#none            5.0M     0  5.0M    0% /run/lock
#none            1.9G  976K  1.9G    1% /run/shm
#none            100M   32K  100M    1% /run/user
#下面这一句,得到第5列第2行中的58%的58
percent=`df -h | awk 'print $5' | head -2 | tail | grep -oP '\\d+'`
echo $percent
if [ $percent -gt 80 ]
then
    #echo "大于80%"
    rm -rf /home/fan/shell/localhost_access_log.$preYY-$preMM*
fi

解释:
grep -oP
-o:只显示满足正则表达式的部分(-o, –only-matching show only the part of a line matching PATTERN)
-P:PATTERN 是一个 Perl 正则表达式
2.定时执行
比如:每10分钟执行一次
crontab -e

*/10 * * * * sh /path/to/cleanDisk.sh

解释:
前5个*分别表示,分钟 小时(24制) 日 月 年
*/10 * * * *表示每10分钟执行一次

update 20160608
上面的获取前一个月的逻辑写了这么多,其实只需要一行就可以搞定:

date -d "-1 month" "+%Y-%m-%d"

获取前一天,前一年类似:

date -d "-1 day" "+%Y-%m-%d"
date -d "-1 month" "+%Y-%m"
date -d "-1 year" "+%Y"

获取当前时间1小时之前的时间:

阅读世界,共赴山海 423全民读书节,邀你共读

以上是关于shell脚本:定期删除日志文件的主要内容,如果未能解决你的问题,请参考以下文章

shell定期删除日志脚本

shell脚本:定期删除日志文件

shell定期转移日志文件到云盘并定期删除云盘文件

如何用shell来实现定期删除一个月前的日志?

Shell实战定期清理日志文件的shell脚本

Centos7下crontab+shell脚本定期自动删除文件