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

0xC*_*22L 94 linux debian logging debian-squeeze logrotate

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

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

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail www@my.org
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }
Run Code Online (Sandbox Code Playgroud)

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

   /var/log/httpd/*.log /var/log/httpd/*/*.log {
       # ... same as above
   }
Run Code Online (Sandbox Code Playgroud)

原因如下:我有多个虚拟主机,我将它们拆分为“拥有”这些虚拟主机的用户。由于日志文件是世界可读的,我想将一个文件夹绑定挂载到用户主目录中,但将其限制为用户“拥有”的日志文件,这是通过将日志分离到文件夹中最容易实现的(并绑定- 无论如何安装都需要该方案)。因此,我正在寻找一种解决方案来轮换该目录下的日志文件/var/log/httpd以及该目录的子目录下的所有日志文件 -无需按名称列出每个子目录。

一般来说,手册页不提供通配符规则是否可能有多个条目或仅用于完整路径的线索。我正在使用 Debian“Squeeze”附带的 logrotate 版本 3.7.8-6,但我认为这不一定特定于发行版或程序版本。

Den*_*son 129

是的,您可以使用多个通配符。您可以通过执行以下操作在不执行实际旋转的情况下测试您的文件:

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

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


Tho*_*ner 34

我只是想澄清一下,因为这就是我来这里寻找的方法,

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

/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
    rotate 5
    mail nobody@example.org
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}
Run Code Online (Sandbox Code Playgroud)


Pio*_*ost 9

logrotate 的手册页:

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

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

这有效:

/var/log/*.log /var/log/*.blog {
Run Code Online (Sandbox Code Playgroud)

这也有效:

/var/log/*.log
/var/log/*.blog {
Run Code Online (Sandbox Code Playgroud)

这不起作用:

'/var/log/*.log /var/log/*.blog' {
Run Code Online (Sandbox Code Playgroud)

而这两者都不是:

"/var/log/*.log /var/log/*.blog" {
Run Code Online (Sandbox Code Playgroud)

与单一模式案例进行比较。

这有效:

'/var/log/*.log' {
Run Code Online (Sandbox Code Playgroud)

这也有效:

"/var/log/*.log" {
Run Code Online (Sandbox Code Playgroud)

用 logrotate 3.10.0 测试

  • 知道这是否有效会很有趣:`"/var/space /log/*.log" "/var/log/*.blog"` (2认同)