shell脚本定期删除日志文件

假设某系统按天记录日志文件,即每天一个日志文件。随着系统的运行,日志文件越来越多。

app.log
app.log.2019-06-18
app.log.2019-06-17
app.log.2019-06-16
app.log.2019-06-15
app.log.2019-06-14
app.log.2019-06-13
app.log.2019-06-12
app.log.2019-06-11
app.log.2019-06-10
...

如何定期清除过期的日志呢?比如,只需要保留最近7天的日志备份?

 

对于linux系统,实现起来很方便:一个删除脚本 + crontab就可实现这个目标

1. 创建自动清理日志的sheel脚本(假定log日志在目录/var/app下),autoCleanLog.sh

#!/bin/bash

searchPath=/var/app
cd ${searchPath}

declare -i total=`ls app.log.* | wc -l`
declare -i nums=$total-7

if [ "${nums}" -ge 1 ];then
    rm -rf `ls -tr app.log.* | head -${nums}`
fi


2. 赋予脚本可执行权限

chmod +x autoCleanLog.sh

3.采用crontab创建定期任务

每天凌晨1点执行(假定清除脚本在目录/var/app下),编辑crontab,增加如下行:

00 01 * * * /var/app/autoCleanLog.sh

让改动的crontab立即生效

sudo /etc/init.d/cron restart

这样就大功告成,此脚本每天凌晨就会启动一次,自动删除7天前备份的log文件。