我正在尝试通过将 /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 再次执行其正常工作。