减少“rotate”值后让 logrotate 删除旧日志

减少“rotate”值后让 logrotate 删除旧日志

我正在尝试通过将 /etc/logrotate.d/apache2 中的“rotate 52”减少为“rotate 8”来减少为 Apache 保留的日志文件数量。通过每周轮换,这应该可以保留 2 个月的日志,而不是一整年的日志。

我通过 Puppet 将新配置部署到我们的十几台服务器上,发现它的工作方式与我的预期不同。我预计它会删除 Apache 错误并访问超过 8 周的日志,即 9-52。相反,它保留了所有旧日志,并且根本没有创建任何新的超过 8 周限制的轮换!轮换 9 现已缺失,但 10-52 仍然存在。

搜索档案显示这是已知行为,例如Logrotate不会删除旧日志

如何轻松删除旧日志?我想避免在每台服务器上手动删除它们。我还没有部署任何编排软件,所以只能用 Puppet 了。

我的 /etc/logrotate.d/apache2 文件内容如下:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 8
    compress
    delaycompress
    notifempty
    create 644 root adm
    sharedscripts
    postrotate
        /etc/init.d/apache2 reload > /dev/null
    endscript
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi; \
    endscript
}

答案1

您可以将 postrotate 脚本添加到当前块,以便使用n以下命令删除几天前的文件:

find /var/log/apache2 -maxdepth 1 -mtime +<n> -name "*.log.*.gz" -delete &>/dev/null

等待下一次轮换然后将其移除并让 logrotate 再次执行其正常工作。

相关内容