每次轮换时,如何将多个日志文件轮换到不同的子目录中?

每次轮换时,如何将多个日志文件轮换到不同的子目录中?

我有一个包含许多日志文件的目录,我希望每天轮换所有这些文件。出于组织目的,我希望能够将轮换的日志移动到按日期命名的不同目录(或子目录),并保留最后一周的日志。

我可以使用 logrotate 来实现大部分功能,方法是就地旋转文件,甚至使用指令将它们移动到单个不同的目录,olddir但我无法找到每次旋转都创建单独子目录的解决方案。我该如何实现这一点?:

Logs to rotate: /var/log/example/*

Desired target directories (keeping a week):
    /var/log/example/20121006/*
    [ ... ]
    /var/log/example/20121012/*

答案1

您应该能够在postrotate指令中调用外部脚本:

postrotate
  /path/to/your.sh
endscript

并让该脚本执行移动,例如:

#!/bin/bash

newdir=/var/log/example/`date +%Y%m%d`

mkdir $newdir
mv /var/log/example.1.gz $newdir

find /var/log/example -mindepth 1 -maxdepth 1 -mtime +7 \
  -type d -print0 | xargs -0 rm -rf

但是,使用dateext指令可能更简单。这样,旋转的文件将附加时间戳(但不会移动到其他目录)。

logrotate(8)有关这两个指令的详细信息,请参阅。

答案2

您有olddir可以在配置文件中使用的指令。

来自文档:

olddir
日志被移动到目录中进行轮换。目录必须与要轮换的日志文件位于同一物理设备上,并且除非指定了绝对路径名,否则假定目录相对于保存日志文件的目录。使用此选项时,所有旧版本的日志都会出现在目录中。此选项可能会被该选项覆盖noolddir

参考https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

相关内容