ubuntu 如何防止logrotate产生不需要的“.backup”文件

kqlmhetl  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(221)

我在ubuntu 16.04上有一个logrotate配置,它可以每天将我的日志旋转到gz。配置是这样的:

/opt/dcm4chee/server/default/log/*.log {
    daily
    missingok
    rotate 5
    compress
    notifempty
    create 0640 dcm4chee dcm4chee
    sharedscripts
    copytruncate
}

它正确地生成gzip日志:

server.log.1.gz
...
server.log.5.gz

然而,它也会偶尔产生一堆不需要的“备份”,这会导致磁盘使用率随着时间的推移失控-我们正在有限的磁盘空间VM上运行:

server.log.1-2018063006.backup
...
server.log.1-2018081406.backup

这完全违背了我最初通过旋转和压缩有限数量的日志来限制磁盘使用量的目的。
如何完全阻止logrotate生成这些“备份”?如果这意味着丢失几行日志,那就这样吧。
我找不到关于这件事的文件。目前,我有一个crontab设置,定期删除这些文件,但它似乎不像'正确'的方式来做的事情。

lymnna71

lymnna711#

当两个logrotate示例在同一组日志文件上并发运行时,会发生这种情况。
例如-当一个示例作为日常运行的常规cron.d的一部分运行,而另一个示例作为cron作业的一部分运行时,可能会发生这种情况

axzmvihb

axzmvihb2#

运行到相同的问题,并发现它是由重复的日志文件造成的。
在我的例子中,我正在logrotating一些nginx日志,通过使用create方法,有时会发生这种情况,当它试图创建一个新的日志文件时,不知何故nginx仍然会产生新的日志并导致以下错误:

error: destination /[example path]/access.log already exists, renaming to /[example path]/access.log-2018122810.backup

因此,它不断制造吨的“.备份”文件,并消耗我的磁盘空间。
在做了一些研究之后,我只是找不到一个好方法来杀死所有的nginx进程,所以我通过在logrotate.d配置中添加copytruncate来临时修复它,它似乎解决了这个问题,但必须承担可能丢失一些日志的风险。
希望有更好的解决办法~

v9tzhpje

v9tzhpje3#

在我的例子中,我在/etc/logrotate.d/nginx中有一些自定义的nginx logrotate配置。我在/etc/cron.d/logrotate_nginx中有一个cron作业,它每10分钟调用一次:

*/10 * * * * root /usr/sbin/logrotate /etc/logrotate.d/nginx | logger -t logrotate_nginx

解决方案是将nginx配置从/etc/logrotate.d中移出并移入/usr/logrotate.d(实际上是任何其他目录),以便系统安装的logrotate不会执行自定义nginx logrotate配置:

*/10 * * * * root /usr/sbin/logrotate /usr/logrotate.d/nginx | logger -t logrotate_nginx

相关问题