假设某系统按天记录日志文件,即每天一个日志文件。随着系统的运行,日志文件越来越多。
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就可实现这个目标
- 创建自动清理日志的sheel脚本(假定log日志在目录/var/app下),autoCleanLog.sh
#!/bin/bash
searchPath=/var/app
cd ${searchPath}
#app.log.* 日志的名字,可以改为*.log.*
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
- 赋予脚本可执行权限
chmod +x autoCleanLog.sh
测试一下:
sh log AutoClean.sh
步骤三:创建crontab定时任务
crontab -e
进入编辑页面(第一次进入会让你选择编辑器,这里我们选择3[vim.basic]就ok)。
设置每天凌晨1点执行(假定清除脚本在目录/home/server/core/logs/app下),编辑crontab,增加如下行:
00 01 * * * /home/server/core/logs/app/logAutoClean.sh
可先设置五分钟执行一次,测试下脚本
*/5 * * * * /home/server/core/logs/app/logAutoClean.sh
如果定时任务不生效,重启下crond服务
# service crond restart //重启服务
https://blog.csdn.net/hello_junz/article/details/92833122