Linux自动删除N天日志

前言

web在部署到linux环境后,一般都是把日志等级设置加高。只输出Error信息或者直接关闭Log。但是某些系统需要搜集容器的access日志来做数据分析。
如果本地存储的话,日子久了,日志就越来越大。占用大量磁盘资源,直接影响到系统的正常运行。所以,这种情况下,对日志做定期清理,是成本最低的方法了。

过程

删除文件脚本

1
find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;

例如:删除3天前 /opt/logs下 search开头的日志。

1
find /opt/logs/ -mtime +3 -name "search*.log" exec rm -rf {} \;

说明:
find:linux的查找命令,用户查找指定条件的文件
/opt/logs/:想要进行清理的任意目录;
-mtime:标准语句写法;
+3:查找30天前的文件,这里用数字代表天数;
“search*.log”:支持范式匹配
-exec:执行
rm -rf:强制删除命令
{} ; :固定写法,一对大括号+空格++;

计划任务

将以上命令放置到可执行shell脚本中再通过cron调度执行。
创建shell:

1
2
touch ~/bin/auto-del-30-days-ago-log.sh
chmod +x auto-del-30-days-ago-log.sh

编辑shell脚本

1
vim auto-del-3-days-ago-log.sh

内容如下:

1
2
#!/bin/sh
find /opt/logs/ -mtime +3 -name "search*.log" exec rm -rf {} \;

添加计划调度:
执行:

1
10 0 * * * ~/auto-del-3-days-ago-log.sh >/dev/null 2>&1

设置是每天凌晨0点10分执行auto-del-3-days-ago-log.sh文件进行数据清理任务了。

总结

THE END.