Tob*_*bia 8 logrotate debian configuration
各种 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
Run Code Online (Sandbox Code Playgroud)
有没有干净的解决方案?我应该每天编写一个 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
配置文件。由于这仅涉及添加新的配置文件,因此不存在升级问题。现有的日志文件仍将使用默认配置生成和轮换,但您的日志文件将遵循您的配置。
在 Debian 中,将配置/二进制文件的副本与发行版的默认设置不同的一种方法是“转移”文件。例如,在安装/更新任何 deb 包的新版本时告诉包管理器,将特定文件安装到另一个目录。
多年来,我一直在使用该dpkg-divert
功能为 BIND 和 ISC-DHCP 保留一个 init.d sys V 包装器,它检查 DNS 和 DHCP 配置文件的一致性,并在重新启动服务时自动增加更改文件区域的序列号绑定。
我还在我的 nfsen 服务器中使用它来保存为我编译的二进制版本,而不是 deb 包的版本。
这样,您就可以根据自己的喜好修改原始位置。
可以说,我根据自己的喜好管理了太多系统,并更改了文件系统配置的标准位置 - 因此在一些更深奥的配置中使用此功能,我不希望修改被压缩但仍希望从升级中受益。
您甚至可能已经在默认情况下使用了 Debian 使用的文件转移,只需使用以下命令列出它们:
dpkg-divert --list
Run Code Online (Sandbox Code Playgroud)
从 man dpkg-divert
例子
Run Code Online (Sandbox Code Playgroud)To divert all copies of a /usr/bin/example to /usr/bin/example.foo, i.e. directs all packages providing /usr/bin/example to install it as /usr/bin/example.foo, performing the rename if required: dpkg-divert --divert /usr/bin/example.foo --rename /usr/bin/example To remove that diversion: dpkg-divert --rename --remove /usr/bin/example To divert any package trying to install /usr/bin/example to /usr/bin/example.foo, except your own wibble package: dpkg-divert --package wibble --divert /usr/bin/example.foo --rename /usr/bin/example To remove that diversion: dpkg-divert --package wibble --rename --remove /usr/bin/example
另请参阅 Debian-Administration.org 站点用 dpkg-divert 替换二进制文件
显然,虽然该指令非常有用,但我不建议过度滥用它。
至于@Stephen Kitt 解决配置文件可能存在的问题,发生的情况是升级会触及转移的文件,如果配置有重大变化,例如,升级到新的 Debian 版本的可能性更大,守护进程获胜't boot,这种情况必须手动解决。此外,公平地说,即使没有转移配置文件,这种情况也可能发生。
dkpg-divert
与其他 Linux 发行版相比,IMO是显示 Debian 包管理器真正灵活性的功能之一。
归档时间: |
|
查看次数: |
3008 次 |
最近记录: |