Linux日志自动清理方案

平时主要处理两种情况:

  • 只生成一个日志文件,需要每天切割,定期删除太旧的。采用 logrotate 定期切割的方案。

  • 每天生成一个日志文件,定期删除太旧的。采用 crontab 定期删除的方案。

logrotate 定期切割

logrotate 是 Linux 自带的一个日志切割工具,不需要安装,只需要添加配置文件。

  1. 用 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
    }
    

    配置文件中的注释必须独占一行。

  2. 执行 logrotate /etc/logrotate.d/myproject -f 尝试切割一次,看效果如何

crontab 定期删除

执行crontab -e,加入一条定时任务:

0 12 * * *     find /home/zhonghong/myproject/logs      ! -mtime -7 | xargs rm -f

这会每天中午12点删除指定目录下,超过 7 天未修改的文件。

Comment