【问题标题】:Logrotate not rotating old files even after rotate is set to 0即使将旋转设置为 0,Logrotate 也不会旋转旧文件
【发布时间】:2018-04-27 12:02:10
【问题描述】:

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

根据文档,当旋转设置为 0 时应该删除文件。为什么会发生这种情况?我还必须说日志轮换配置为每小时运行一次,但我们的日志文件在 1 小时内达到大小。因此,当 logrotate 每小时运行一次时,它会删除 old 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
}

【问题讨论】:

    标签: logrotate log-rotation


    【解决方案1】:

    看起来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 设置:日志文件永远不会被删除,只会被复制,然后被截断就地 .这用于无法更改正在写入的文件句柄的程序。

    【讨论】:

    • "为什么不直接登录到 /dev/null 呢?"因为您想保留最新的日志,但不需要保留旧的日志。特别是您可能希望在发生某些事情但不需要历史日志时使用tail -f 观看日志。
    • @thayne 说得通。
    猜你喜欢
    • 2019-10-24
    • 2019-05-12
    • 2021-06-13
    • 2018-05-30
    • 2019-06-16
    • 2014-02-14
    • 2014-11-24
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多