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