Apache-Httpd
旋轉日誌時如何避免apache重新載入?
我使用 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 }