Logrotate 不截断打开的文件

dso*_*len 3 logs logrotate

我有一个同时充当测试和演示平台的系统。我正在记录我的系统输出的大量数据,在部署时我不会记录这些数据,因此我的日志文件会很快填满,最终我的硬盘驱动器上的分区空间用完了。

我试过了logrotate,但它似乎只有在我的程序没有运行时才有效。当程序关闭时,它会正确截断文件,记录压缩版本,并丢弃其余部分。但是,当我填充日志文件的程序启动并运行时,它将正确创建压缩文件,但不会截断活动文件。我想弄清楚如何使它截断。

我正在通过简单的重定向写入日志文件。 ProgramA>logAprogramB>logB等我的编程'的输出每次我收到的输入向量,所以它的输出非常迅速。我的假设是 logrotate 由于对该字段的不断写入而未能截断,但有人可以确认这是原因吗?

无论如何,logrotate 在哪里保存它的错误文件?

另外:我想修改 logrotate 的行为。如果它激活并看到一个大的,比如 100 MB 的日志文件,我希望它在截断原始日志文件之前创建文件最后 1 MB 的副本(丢弃文件中较旧的 99 MB 内容)。我需要保留最近的数据,但我不太关心任何很旧的东西。谁能告诉我如何做到这一点?

小智 5

我知道这有点旧,但我遇到了同样的问题,解决方案是使用附加重定向到输出文件而不是破坏它。这样您的应用程序/脚本就不会以独占方式锁定文件。

代替:

ProgramA > logA
Run Code Online (Sandbox Code Playgroud)

用:

ProgramA >> logA 
Run Code Online (Sandbox Code Playgroud)

问候。