使 logrotate 仅在服务启动时旋转

使 logrotate 仅在服务启动时旋转

我希望每次启动服务时都进行日志文件轮换,但绝不会“自动”进行。

我正在运行一个基于 Python 的服务,该服务会记录到特定的日志文件。该服务(当前)不支持重新打开其日志文件的通知(例如USR1trap)。此外,该服务一定不重新启动日志文件轮换(它正在产生连续的音频流,不应被中断)。

我所运行的系统没有硬件时钟,因此每次系统启动时时钟都会重置,这使得来自同一文件中不同重启的日志条目变得乏味(我多次获得相同的日期)。

我还想保留各种靴子的历史记录。

因此,我们的想法是在每次启动时(仅)使用日志旋转。

/usr/sbin/logrotate --force /etc/logrotate.d/myservice在启动服务之前运行之类的操作应该可以解决问题。

现在我的问题是,是否可以这样配置 log-rotationg /etc/logrotate.d/myservice,以便绝不自动运行?

一个简单的解决方案就是不是将我的 logrotate-config 文件存储在 中/etc/logrotate.d/,但“在其他地方”。

但是,我希望我的用户能够在知名位置(这样他们就可以随意修改配置)。

答案1

您可以配置 logrotate 通过 copy-truncate 旋转文件,这样可以保留原始文件并且不需要您重新创建日志文件。

语法是:

/tmp/output.log {
        size 1M
        copytruncate
        rotate 4
        compress
}

这将复制当前文件,然后cat /dev/null > file

话虽如此,除非另有配置,否则 logrotate 只会“自动”旋转特定位置的文件。我猜想您正在将脚本记录到 /var/log/httpd,这就是它自动旋转的原因。

答案2

如果您不想/不需要使用 logrotate,为什么还要使用它呢?

只需从启动脚本旋转日志文件即可。

相关内容