Linux
logrotate 如何處理並發?
如果在
logrotate
更新日誌文件的同時執行,會發生什麼?新日誌會被輪換成歷史日誌文件嗎?還是會留在目前的日誌文件中?
在輪換期間,日誌消息可以在舊文件或新文件中結束,但以一種確定的方式結束。Logrotate 對每個日誌文件大致執行以下操作:
- 將日誌重命名為歸檔名稱
- 向應用程序發出信號以重新打開其日誌
- 可選擇壓縮日誌文件
如果在 1 和 2 之間記錄消息,這些消息將最終出現在重命名的日誌中,因為重命名不會影響打開的文件描述符(這也是壓縮僅在應用程序重新打開其日誌*後才會發生的原因)。*2 之後記錄的消息將在新日誌中結束。
這是我的 logrotate 配置的摘錄,它執行我為 nginx 日誌描述的操作:
/var/log/nginx/*.log { compress delaycompress postrotate [ ! -f /run/nginx.pid ] || kill -USR1 `cat /run/nginx.pid` endscript }