logrotate 配置文件语法 - 可能有多个通配符条目吗?

logrotate 配置文件语法 - 可能有多个通配符条目吗?

由于手册页没有回答我的问题并且我不想强制轮换循环,所以我决定在这里提出这个问题。

logrotate 的手册页给出了以下示例:

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail [email protected]
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }

所有带通配符的示例都只包含一个条目。现在,我感兴趣的是这个是否也允许:

   /var/log/httpd/*.log /var/log/httpd/*/*.log {
       # ... same as above
   }

原因如下:我有多个虚拟主机,我根据“拥有”这些虚拟主机的用户对它们进行拆分。由于日志文件是全球可读的,我想将一个文件夹绑定到用户主目录中,但将其限制为用户“拥有”的日志文件,最简单的方法是将日志分成文件夹(绑定安装无论如何都需要该方案)。所以我正在寻找一种解决方案来轮换该目录下的日志文件/var/log/httpd以及该目录子目录下的所有日志文件 -没有必须按名称列出每个子目录。

一般情况下,手册页不会提示通配符规则是否有多个条目,或者只有完整路径才有多个条目。我使用的是 Debian“Squeeze”附带的 logrotate 版本 3.7.8-6,但我认为这不一定特定于发行版或程序版本。

答案1

是的,您可以使用多个通配符。您可以通过以下方式测试文件而无需执行实际旋转:

logrotate -d -f /etc/logrotate.conf
  • -d = 打开调试模式。在调试模式下,不会对日志或 logrotate 状态文件进行任何更改。

  • -f = 告诉 logrotate 强制轮换,即使它认为没有必要。有时在向 logrotate 添加新条目后,或者手动删除旧日志文件后,这很有用,因为将创建新文件,并且日志记录将继续正确进行。

答案2

我只是想澄清一下,因为我来这里就是为了看看怎么做,

允许为单个配置指定多个日志文件,例如

/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
    rotate 5
    mail [email protected]
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}

答案3

来自手册页日志旋转

请注意,日志文件名可以用引号括起来(如果名称包含空格,则必须使用引号)。适用正常的 shell 引号规则,支持 '、" 和 \ 字符。

从单个模式变为多个模式时,请记住修改或删除引号:

这有效:

/var/log/*.log /var/log/*.blog {

这也有效:

/var/log/*.log
/var/log/*.blog {

这不起作用:

'/var/log/*.log /var/log/*.blog' {

并且这也不是:

"/var/log/*.log /var/log/*.blog" {

与单一模式的情况进行比较。

这有效:

'/var/log/*.log' {

这也有效:

"/var/log/*.log" {

使用 logrotate 3.10.0 测试

编辑: 这也有效:

"/opt/logs/*.log" "/opt/logs/dir with space/*.log" {

并且多行带引号也有效:

"/opt/logs/*.log" 
"/opt/logs/dir with space/*.log" {

使用 logrotate 3.14.0 进行测试

相关内容