如何正確覆蓋 logrotate 策略?
各種 Debian 軟體包,包括
logrotate
和rsyslog
,將它們自己的日誌輪換定義放在/etc/logrotate.d/
覆蓋這些定義的正確方法是什麼?
如果我修改文件,我會在每次系統更新時收到警告,如果我(或其他人)給出錯誤答案,我可能會失去更改;或者如果我(或其他人)未能手動合併文件,則可能無法獲得新日誌文件的新上游定義。在過去的幾年裡,這兩件事經常發生。
我嘗試覆蓋
00_*
或zz_*
文件中的定義,但出現重複錯誤:error: zz_mail:1 duplicate log entry for /var/log/mail.log error: found error in /var/log/mail.log , skipping
有什麼乾淨的解決方案嗎?我應該每天編寫一個 cron 腳本來重新應用我對定義文件的更改嗎?
**編輯:**更清楚地說,理想情況下,我希望保留 99%
rsyslog
的日誌輪換定義,並使用 APT 自動更新。除了一個定義之外,/var/log/mail.log
我需要應用不同的輪換策略。如果 Logrotate 允許重複定義,並且每個文件只使用第一個或最後一個,我的問題就解決了。如果它有一個
override
選項,將定義標記為故意覆蓋以前的定義,那也可以解決它。但是,唉,看來我需要用我自己的版本覆蓋整個
/etc/logrotate.d/rsyslog
(和nginx
,和其他)。
首先,我建議使用一種工具,例如
etckeeper
跟踪對 ; 中文件的更改/etc
。這可以避免升級期間的數據失去(以及其他好處)。覆蓋定義的“正確”方法是直接編輯配置文件;這就是為什麼
dpkg
知道如何處理配置文件並在升級引入更改時提示您的原因。不幸的是,正如您所發現的那樣,這並不理想。要以對 Debian 友好的方式實際解決您的特定配置問題,我建議您將郵件消息實際記錄到不同的日誌文件中,並將其設置為
logrotate
:
- 在 中添加一個新的日誌配置文件
/etc/rsyslog.d
,指向mail.*
一個新的日誌文件,例如/var/log/ourmail.log
(假設您正在使用rsyslog
- 酌情更改);/var/log/ourmail.log
在新的配置logrotate
文件中配置。由於這只涉及添加新的配置文件,因此不存在升級問題。現有日誌文件仍將使用預設配置生成和輪換,但您的日誌文件將遵循您的配置。