假设某系统按天记录日志文件,即每天一个日志文件。随着系统的运行,日志文件越来越多。
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文件。