如何檢測 logrotate 的錯誤

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

錯誤狀況

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

相關服務

  • syslog: linux 用來記錄 log 的服務
  • crond: 用來每日執行一次 logrotate

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

相關檔案

  • /etc/logrotate.conf: 主要的設定檔
  • /etc/logrotate.d/*: 各 log 檔的輪替條件設定
  • /etc/cron.daily/logrotate: 每日自動執行 logrotate
  • /var/log/*: 各 log 檔的存放位置
  • /var/lib/logrotate.status: 各 log 檔最後運作 logrotate 的日期

檢測步驟

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/,直接修改錯誤訊息中所提示的檔案,或是開啟每個設定檔,看有沒有重覆定義的地方,將重覆的地方刪除即可。

參考網頁

  1. No comments yet.

  1. No trackbacks yet.

return top

%d 位部落客按了讚: