logrotate 如何处理并发?

logrotate 如何处理并发?

如果在logrotate日志文件更新的同时运行,会发生什么情况?新日志会被轮换到历史日志文件中吗?还是会留在当前日志文件中?

答案1

在轮换期间,日志消息可能会以确定的方式出现在旧文件或新文件中。Logrotate 大致对每个日志文件执行以下操作:

  1. 将日志重命名为存档名称
  2. 向应用程序发出信号以重新打开其日志
  3. 可选择压缩日志文件

如果在 1 和 2 之间记录了消息,这些消息最终将出现在重命名日志中,因为重命名不会影响打开的文件描述符(这也是为什么压缩只发生应用程序重新打开其日志)。 2 之后记录的消息将最终进入新日志。

以下是我的 logrotate 配置的摘录,它执行我对 nginx 日志所描述的操作:

/var/log/nginx/*.log {
    compress
    delaycompress
    postrotate
        [ ! -f /run/nginx.pid ] || kill -USR1 `cat /run/nginx.pid`
    endscript
}

相关内容