Logrotate

年表與對數旋轉

  • May 25, 2017

您更喜歡哪種日誌輪換工具?

根據我的經驗,logrotate 很棒。它非常靈活,並且適用於大多數軟體。

但是,它存在一些問題,並且由於 cronolog 主要是一個 Web 日誌輪換工具,我將寫下我使用 logrotate + apache 的經驗,這是有問題的:

輪換日誌時,我們必須通知 apache 正在輪換日誌,因為即使 logrotate 將 access.log 重命名為 access.log.1,apache 也會繼續寫入 access.log.1,因為它正在寫入 inode,並且重命名文件不會影響 inode 編號。

在 debian etch(可能還有許多其他發行版)上,logrotate 被用於輪換 apache 日誌。現在,apache 有一個優雅的重啟,它建議 apache 子程序在完成現有連接服務後退出,然後 apache 重新讀取它的配置,生成新的子程序,這些子程序開始寫入新的日誌文件(如果前一個是旋轉)。

這聽起來像是一個很好的解決方案,但是在某些情況下(如重負載),優雅重啟並不總是有效,因此 debian 開發人員決定在 apache logrotate 配置中使用 apache restart 而不是優雅重啟。不幸的是,這會導致所有連接立即斷開,這對於負載重的站點來說是非常糟糕的。此外,apache 重啟也會導致 apache 停止和不啟動等問題(在某些負載情況下也是如此),詳情請參閱下面的錯誤連結。

底線是,logrotate 很棒,但可能會導致某些程序出現某些問題。我對 cronolog 沒有太多經驗,但是當它通過管道寫入日誌時,它在旋轉日誌文件時不需要任何 apache 重新載入,這基本上解決了上面描述的所有問題。

相關的 logrotate/apache debian 錯誤:

  1. Debian 錯誤#301702
  2. Debian 錯誤#400455

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