Linux日志自动清理方案
平时主要处理两种情况:
- 只生成一个日志文件,需要每天切割,定期删除太旧的。采用 logrotate 定期切割的方案。
- 每天生成一个日志文件,定期删除太旧的。采用 crontab 定期删除的方案。
logrotate 定期切割
logrotate 是 Linux 自带的一个日志切割工具,不需要安装,只需要添加配置文件。
用 root 权限在
/etc/logrotate.d/
目录下创建一个配置文件/etc/logrotate.d/myproject
,文件名任意自定,内容如下例:# 指定待切割的日志文件的绝对路径(如果有多个路径,则用空格分隔) /home/zhonghong/*.log { # 切换到指定的用户、用户组来执行切割任务 su zhonghong zhonghong # 每天轮询一次,切割生成一个归档日志 daily # 最多保留 7 个归档日志 rotate 7 missingok notifempty dateext dateformat -%Y-%m-%d extension .log copytruncate }
配置文件中的注释必须独占一行。
执行
logrotate /etc/logrotate.d/myproject -f
尝试切割一次,看效果如何。
crontab 定期删除
执行
crontab -e
,加入一条定时任务:0 12 * * * find /home/zhonghong/myproject/logs ! -mtime -7 | xargs rm -f
这会每天中午12点删除指定目录下,超过 7 天未修改的文件。