是否可以让logrotate考虑目录及其所有子目录中的日志文件? (即,没有明确列出子目录。)

#1 楼

您的子目录有多深?

/var/log/basedir/*.log /var/log/basedir/*/*.log {
    daily
    rotate 5
}


将轮换basedir /中的所有.log文件以及baseir的任何直接子级中的所有.log文件。如果您还需要更深一层,只需添加另一个/var/log/basedir/*/*/*.log,直到您覆盖每个级别为止。

可以使用单独的logrotate配置文件进行测试,该文件包含不满足的约束(a高最小大小),然后运行日志以详细模式旋转自己

logrotate -d testconfig.conf


-d标志将列出要旋转的每个日志文件。

评论


谢谢!看起来-d实际上使logrotate处于空运行模式(即实际上并未更改任何内容)。

–ithinkihaveacat
2010-12-3 15:36

并非直接相关,但可能对某人有用。 -f选项告诉logrotate“强制运行”。命令末尾的裸字是要使用的配置文件,而不是默认文件。因此logrotate -f / some / config意味着与该配置文件一起运行,并且即使该配置文件显示尚未运行,它也始终运行。对于我未经训练的眼睛,以及对我进行此工作的前任,看来-f只是在指定配置文件。相当混乱。

–丹·普里兹(Dan Pritts)
2015年10月5日在16:39



#2 楼

就我而言,子目录的深度可以更改而不会发出警告,因此我设置了一个bash脚本来查找所有子目录并为每个目录创建一个配置条目。

旋转后保持子目录的结构对我来说也很重要,而通配符(即@DanR的答案)似乎并没有这样做。如果您每天进行日志轮换,则可以将此脚本放入日常cron作业。

 basedir=/var/log/basedir/
#destdir=${basedir} # if you want rotated files in the same directories
destdir=/var/log/archivedir/ #if you want rotated files somewhere else
config_file=/wherever/you/keep/it
> ${config_file} #clear existing config_file contents

subfolders = $(find ${basedir} -type d)

for ii in ${subfolders}
do
    jj=${ii:${#basedir}} #strip off basedir, jj is the relative path

    #append new entry to config_file
    echo "${basedir}${jj}/* {
        olddir ${destdir}${jj}/
        daily
        rotate 5
    }" >> ${config_file}

    #add one line as spacing between entries
    echo "\n" >> ${config_file}

    #create destination folder, if it doesn't exist
    [ -d ${destdir}${jj} ] || mkdir ${destdir}${jj}
done
 


像@DanR建议的一样,用logrotate -d测试

#3 楼

它是旧线程,但是您可以执行以下操作:

/var/log/basedir/**/*.log {
    daily
    rotate 5
}
这两个星号将匹配零个或多个目录。但是,您必须小心如何定义要轮换的日志文件,因为您可以轮换已经轮换的文件。我将在此处引用logrotate的手册。


请谨慎使用通配符。如果指定*,logrotate将旋转所有文件,包括先前旋转的文件。一种解决方法是使用olddir指令或更精确的通配符(例如* .log)。


评论


这种通配符模式对我不起作用。 RHEL 7.3上的Logrotate 3.8.6

–northben
17年5月30日在14:40

也许您应该在运行logrotate之前启用globstar。这将使其支持bash shopt -s globstar。

–bat_ventzi
17年5月5日在9:15

我也有同样的问题。 Ubuntu 16.04.3。上的Logrotate 3.8.7 ls /var/log/basedir/**/*.log如前所述,但logrotate无效。

–frogstarr78
17年8月10日在23:12

在logrotate 3.11.0上也不适合我。我认为bash扩展与logrotate通配符无关。 (除了类似的语法)

– Thayne
19年1月23日在22:39

不工作请删除此答案或添加适用的版本。

– Quisse
20年1月8日在7:50