logrotate 如何处理并发?

joh*_*sam 7 linux logging logrotate

如果在logrotate更新日志文件的同时运行,会发生什么?新日志会轮换成历史日志文件吗?或者它会留在当前的日志文件中?

Den*_*ker 14

在轮换期间,日志消息可以在旧文件或新文件中结束,但是以一种确定性的方式。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
}
Run Code Online (Sandbox Code Playgroud)