- Vixual - http://www.vixual.net/blog -

如何檢測 logrotate 的錯誤

logrotate 的主要功能是將舊的 log 檔改檔名,並建立一個新的檔案來讓 syslog 存放新的 log。

錯誤狀況

我的 Linux 系統都有持續在寫入 log,但是單一的 log 檔檔案過大,表示已經有幾個月沒有執行 logrotate 了! 因此研判 syslog 的功能是正常的,可能是 logrotate 的運作出了問題。

相關服務

原則上,syslog 與 crond 都必須啟動,不過與 logrotate 有關的只有 crond。

相關檔案

檢測步驟

1. 檢查 crond 是否有在運行:

# service crond status
crond 正在執行...

2. 執行 logrotate,並載入主要的設定檔:

# /usr/sbin/logrotate /etc/logrotate.conf
error: vsftpd.log:7 duplicate log entry for /var/log/xferlog

終於發現了錯誤!!

原來我的系統原本已經裝了 proftpd,後來又裝了 vsftpd,導致 /etc/logrotate.d/ 裡的 proftpd 與 vsftpd.log 這兩個檔案都有定義了「/var/log/xferlog」的輪替條件,因此錯誤訊息才會顯示「duplicate log entry for /var/log/xferlog」,並且告訴你是在 vsftpd.log 的第 7 行。

解決辦法

知道錯誤之後就好辦了,編輯 /etc/logrotate.d/vsftpd.log,找到:

/var/log/xferlog {
    ...
}

將這幾行全部刪除。

儲存之後,再執行一次:

# /usr/sbin/logrotate /etc/logrotate.conf

ok,這下正常了。

同理,以後如果遇到類似的錯誤,例如下面這些:

duplicate log entry for /var/log/cron
duplicate log entry for /var/log/maillog
duplicate log entry for /var/log/messages
duplicate log entry for /var/log/secure
duplicate log entry for /var/log/httpd/access_log

就是進到 /etc/logrotate.d/,直接修改錯誤訊息中所提示的檔案,或是開啟每個設定檔,看有沒有重覆定義的地方,將重覆的地方刪除即可。

參考網頁