gpt4 book ai didi

即使将旋转设置为 0,Logrotate 也不会旋转旧文件

转载 作者:行者123 更新时间:2023-12-04 17:48:15 25 4
gpt4 key购买 nike

在我的日志轮换设置中,对于特定的日志文件,轮换设置为 0。但是一旦达到文件大小,旧文件将轮换为 application.log.1而不是被删除。

根据文档,当 rotate 设置为 0 时,文件应该被删除。为什么会这样?我还必须说,log rotate 配置为每小时运行一次,但我们的日志文件在 1 小时内达到了大小。因此,当 logrotate 每小时运行一次时,它会删除 旧的 application.log.1,将当前的 application.log 滚动到 application.log.1 并创建一个新的 application.log 文件。该文件的配置如下所示:

/var/log/application.log
{
rotate 0
weekly
size 256M
missingok
notifempty
copytruncate
compress
delaycompress
sharedscripts
postrotate
reload rsyslog >/dev/null 2>&1 || true
/usr/sbin/scalyr-agent-2 stop
/usr/sbin/scalyr-agent-2 start
endscript
}

最佳答案

看起来 copytruncatedelaycompress 都会导致创建新文件,尽管有 rotate 0 设置。既然你想立即删除旧文件(为什么不直接登录到 /dev/null 呢?),你不需要任何 compress 设置。

我看到两个选项:

  • 如果你真的需要copytruncate,添加一个postrotate命令来删除创建的文件:

    /var/log/application.log {
    rotate 0
    size 256M
    missingok
    notifempty
    copytruncate
    postrotate
    reload rsyslog >/dev/null 2>&1 || true
    /usr/sbin/scalyr-agent-2 stop
    /usr/sbin/scalyr-agent-2 start
    rm -f /var/log/application.log.1
    endscript
    }
  • 如果您不需要 copytruncate,请将其替换为 create(如果有的话,也许您的服务会自行创建一个新的日志文件):

    /var/log/application.log {
    rotate 0
    size 256M
    missingok
    notifempty
    create
    postrotate
    reload rsyslog >/dev/null 2>&1 || true
    /usr/sbin/scalyr-agent-2 stop
    /usr/sbin/scalyr-agent-2 start
    endscript
    }

    根据需要向 create 命令添加所有者和权限。

我还做了以下事情:

  • 删除weekly:频率和size是互斥的
  • 删除 compressdelaycompress 命令:您想要删除旧文件,那么为什么一开始就费心压缩?

但是,正如上面所指出的,看起来您一开始并不想要日志,因此请尝试阻止应用程序写入它们,或者重定向到 /dev/null,如果你真的不需要它们。

旁注:您对正在发生的事情的描述不太准确因为 copytruncate 设置:日志文件永远不会被删除,只会被复制,然后被截断地点。这用于无法更改正在写入的文件句柄的程序。

关于即使将旋转设置为 0,Logrotate 也不会旋转旧文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47287475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com