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

Dav*_*mic 8 ubuntu logrotate

我在 ubuntu 16.04 上有一个 logrotate 配置,旨在每天将我的日志轮换到 gz。配置是这样的:

/opt/dcm4chee/server/default/log/*.log {
    daily
    missingok
    rotate 5
    compress
    notifempty
    create 0640 dcm4chee dcm4chee
    sharedscripts
    copytruncate
}
Run Code Online (Sandbox Code Playgroud)

它正确生成 gzip 压缩的日志:

server.log.1.gz
...
server.log.5.gz
Run Code Online (Sandbox Code Playgroud)

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

server.log.1-2018063006.backup
...
server.log.1-2018081406.backup
Run Code Online (Sandbox Code Playgroud)

这完全违背了我最初通过旋转和压缩有限数量的日志来限制磁盘使用的最初目的。

如何完全阻止 logrotate 生成这些“备份”?如果这意味着丢失几行日志记录,那就这样吧。

我无法找到有关此事的文件。目前我有一个 crontab 设置,它会定期删除这些文件,但这似乎不是“正确”的做事方式。

小智 7

当 logrotate 的两个实例在同一组日志文件上同时运行时,就会发生这种情况。

例如 - 当一个实例作为每天运行的常规 cron.d 的一部分运行,而另一个实例作为 cron 作业的一部分运行时,可能会发生这种情况


And*_*ang 6

遇到同样的问题,发现它是由重复的日志文件引起的。

就我而言,我正在对一些 nginx 日志进行 logrotating,并且通过使用 create 方法,有时会发生这种情况,当它尝试创建新的日志文件时,nginx 仍然以某种方式生成新日志并导致以下错误:

error: destination /[example path]/access.log already exists, renaming to /[example path]/access.log-2018122810.backup
Run Code Online (Sandbox Code Playgroud)

所以它不断制作大量的“.backup”文件并消耗我的磁盘空间。

在做了一些研究之后,我只是找不到杀死所有 nginx 进程的好方法,所以我通过copytruncate在我的 logrotate.d 配置中添加来临时修复它,它似乎解决了问题,但必须冒风险丢失了一些日志。

希望有更好的解决方案~