在减少“旋转”值后使 logrotate 删除旧日志

Mar*_*els 3 logging puppet logrotate apache-2.2

我试图通过将 /etc/logrotate.d/apache2 中的“旋转 52”减少到“旋转 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
}
Run Code Online (Sandbox Code Playgroud)

Xav*_*cas 5

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

find /var/log/apache2 -maxdepth 1 -mtime +<n> -name "*.log.*.gz" -delete &>/dev/null
Run Code Online (Sandbox Code Playgroud)

等待下一次旋转,然后将其删除,让 logrotate 再次执行其正常工作。