我有一个logrotate.dconfiguration文件,看起来像这样:
/home/myapp/log/* { daily compress dateext ifempty delaycompress olddir /home/myapp/baklog }
有几个特定的日志文件,我想要应用其他规则,如“邮件”。 我怎样才能将附加规则应用于一些文件?
如果我添加上面的匹配附加文件的另一个规则(例如/ /home/myapp/log/warning.log { ... } error: /etc/logrotate.d/myapp:3 duplicate log entry for /home/myapp/log/warning.log /home/myapp/log/warning.log { ... } ,我得到一个错误,如error: /etc/logrotate.d/myapp:3 duplicate log entry for /home/myapp/log/warning.log 。
如何以重叠的方式指定与特定文件匹配的多个规则?
以太观察到,重叠的path是故意禁止的。
如果你愿意并且能够运行带有shell的选项extglob enabled(在运行crontab logrotate的根环境中的shopt -s extglob ),或者它已经被设置(在同一个环境中与shopt extglob一起检查),那么你可以创build显式path排除,其中logrotate.conf没有另外规定。 你需要声明每个这样的排除。 当然,更好的解决scheme是重新configuration日志logging系统,为需要特殊处理的文件使用单独的目录(如果这是一个选项)。
用extglob你可以声明如下:
/home/myapp/log/!(warning.log) { daily compress dateext ifempty delaycompress olddir /home/myapp/baklog }
…和!(warning.log)将匹配除了那个之外的所有文件,允许您为其编写特定的规则。 这很麻烦,并引入了一些维护,所以如果你可以configuration应用程序的日志logging系统来logging高优先级或其他特殊的日志文件到一个单独的目录,那么这样做会好得多。
在大多数发行版中,你不能这样做。
看起来好像是在Debian做出了一个决定,允许覆盖特定文件的规则是不好的,因为包安装错误地安装重复的规则变得很常见,而且logrotate维护者想把它标记为错误。
所以无论如何,无论是通过使用更具体的通配符( log/[a-hj-z]*而不是log/* ),所以通用规则不会被应用于例外日志文件或通过更改您的应用程序configuration将exception日志文件放在不同的目录中,您必须解决它,所以没有多个规则针对相同的日志文件。