Debian

如何正確覆蓋 logrotate 策略?

  • December 19, 2018

各種 Debian 軟體包,包括logrotatersyslog,將它們自己的日誌輪換定義放在/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文件中配置。

由於這只涉及添加新的配置文件,因此不存在升級問題。現有日誌文件仍將使用預設配置生成和輪換,但您的日誌文件將遵循您的配置。

引用自:https://unix.stackexchange.com/questions/382909