我正在編寫一個軟體,當進程從 logrotate 等收到 SIGHUP 訊號時,我想重新載入日誌檔案。問題是,在 logrotate 開始壓縮輪換日誌檔案之前應用程式可以使用多少時間?
線上說明頁面和我找到的所有參考資料都只是指出應用程式必須「立即」重新載入日誌,但沒有說明這是否必須在 1 毫秒或 1 秒內完成,例如。
答案1
為了安全起見:根本沒有。
Logrotate 假定一旦 postrotate 指令完成,日誌檔案將不再被寫入。有兩種方法可以處理「關閉日誌檔案可能需要一段時間」:
- 對數旋轉的
delaycompress
選項延遲壓縮步驟,直到下一個日誌旋轉呼叫。這樣,它可能會花費下一次 logrotate 運行所需的時間(儘管這樣做是一個非常糟糕的主意)。 - 您可以編寫一個命令列工具來告訴守護程序關閉並重新開啟日誌文件,並確保此命令確實不是退出,直到守護程式確認所有日誌檔案都已關閉(它不需要等到它們也重新打開,儘管這並沒有什麼壞處)。然後人們可以使用 logrotate
postrotate
節中的這個命令列工具。