2014-03-05 43 views
10

運行logrotate力後之後,我的應用不斷寫入my_app.log.1(舊的日誌應存檔後),而不是my_app.log應用程序寫入「.log.1" 文件,而不是」 .LOG」文件運行logrotate的

這使得my_app.log一個空文件,因此logrotate運行沒有任何影響。並my_app.log.1繼續增長到千兆字節。

我正在運行Ubuntu 12.04。我的應用程序是一個使用pm2的Node.js應用程序。以下是我的logrotate的配置:

"/var/log/my_app/*.log" { 
    daily 
    size 50M 
    rotate 10 
    missingok 
    compress 
    delaycompress 
    notifempty 
} 

我知道我把notifempty有,但爲什麼my_app.log.1擺在首位寫?

+0

如果應用程序在運行時保持日誌文件處於打開狀態,則它不受文件名稱更改的影響。它繼續在文件中寫入。在重命名文件後,可以配置'logrotate'(在'postrotate'腳本中)重新啓動應用程序(或發送一個'HUP'信號,如果應用程序響應的話)。文檔中有一些示例。 – axiac

回答

16

我終於想出瞭如何解決這個問題。

這是因爲日誌文件正在寫入pm2logrotate更名爲my_app.log.1並創建了新的my_app.log文件,但pm2不關心此問題,並一直寫入my_app.log.1

我解決了這個問題,將notifempty選項替換爲copytruncate,然後重新啓動pm2。修復後,notifempty可以加回去,但我並不需要它。

有關更多信息,請參閱logrotate reference。希望這會幫助其他人得到類似的問題。