2013-01-03 61 views
8

我正在運行帶有APC的php5 FPM作爲操作碼和應用程​​序緩存。像往常一樣,我將php錯誤記錄到文件中。如何使用php日誌配置logrotate

由於這變得相當大,我試圖配置logrotate。它可以工作,但是在循環之後,即使重命名,php也會繼續登錄到現有的日誌文件。這導致scripts.log是0B文件,而scripts.log.1繼續增長。

我想(沒有嘗試過)在postrotate中運行php5-fpm重新加載可以解決這個問題,但是每次都會清除我的APC緩存。

有人知道如何正確地工作嗎?

+0

當您旋轉日誌時,我認爲您也需要重新啓動FPM。或者你需要告訴logrotate實際創建一個新的inode並截斷現有的文件。否則,FPM將繼續寫入日誌文件inode,因此單獨重命名文件不會有幫助(這是您在問題中描述的行爲)。 – hakre

+0

copytruncate只是你的救星.. – Satish

回答

5

我發現logrotate的「copytruncate」選項可以確保inode不會改變。基本上什麼是[原文如此!]正在尋找。

這可能是你在找什麼。取自:How does logrotate work? - Linuxquestions.org

正如我的評論所寫,您需要防止PHP寫入同一個(重命名的)文件。複製文件通常會創建一個新的,而截斷的,以及該選項的名字的一部分,所以我會假設,在copytruncate選項是一個簡單的解決方案(from the manpage):

另請參見:

+1

完美!奇蹟般有效 –

5

另一個這樣我在我的服務器上找到的是告訴php重新打開日誌。我認爲nginx也有這個功能,這讓我覺得它一定是相當普遍的地方。這裏是我的配置:

/var/log/php5-fpm.log { 
     rotate 12 
     weekly 
     missingok 
     notifempty 
     compress 
     delaycompress 
     postrotate 
       invoke-rc.d php5-fpm reopen-logs > /dev/null 
     endscript 
}