Apache-Httpd

旋轉日誌時如何避免apache重新載入?

  • February 7, 2018

我使用 logrotate 來輪換 Apache 訪問、錯誤和重寫日誌。我的配置文件如下所示:

/apache/*log {
   compress
   dateext
   rotate 365
   size=+300M
   olddir /log/old/apache
   notifempty
   missingok
   lastaction
    /bin/apache reload
   endscript
}

我的問題是,每當發生輪換時,都必須重新載入 Apache,因為 Apache 不再在剛剛輪換的日誌文件中寫入任何內容。每次 logrotate 進行輪換時,有沒有辦法避免 Apache 重新載入?

apache 需要重新載入的原因是,一旦它打開一個文件,它就會獲得一個文件句柄,並且它將繼續寫入該文件句柄。當您移動文件時,它看不到它,它只是不斷寫入同一個句柄。當你重新載入時,它會再次打開文件並獲得一個新的句柄。

為避免重新載入,您可以複製它並清空舊文件,而不是移動文件。這樣 apache 可以繼續寫入同一個文件句柄。您可以通過將選項“copytruncate”添加到 logrotate 配置文件來執行此操作,如下所示:

/apache/*log {
   copytruncate
   compress
   dateext
   rotate 365
   size=+300M
   olddir /log/old/apache
   notifempty
   missingok
}

引用自:https://unix.stackexchange.com/questions/47688