对目录及其子目录中的文件进行logrotating


Answers:


87

您的子目录有多深?

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

将旋转所有的.log在BASEDIR /文件,以及所有的.log在BASEDIR的任何直接的子文件。如果您还需要更深一层,只需添加另一层,/var/log/basedir/*/*/*.log直到覆盖了每个层。

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

logrotate -d testconfig.conf

-d标志将列出要轮换的每个日志文件。


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

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

4

就我而言,子目录的深度可以更改而不会发出警告,因此我设置了一个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


1

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

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

这两颗星将匹配零个或多个目录。但是,您必须小心如何定义要轮换的日志文件,因为您可以轮换已经轮换的文件。我将在此处引用logrotate的手册。

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


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

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

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

在logrotate 3.11.0上也不适合我。我认为bash扩展与logrotate通配符无关。(类似语法除外)
Thayne
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.