Linux

logrotate 如何處理並發?

  • October 29, 2019

如果在logrotate更新日誌文件的同時執行,會發生什麼?新日誌會被輪換成歷史日誌文件嗎?還是會留在目前的日誌文件中?

在輪換期間,日誌消息可以在舊文件或新文件中結束,但以一種確定的方式結束。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
}

引用自:https://serverfault.com/questions/554249