如何将许多日志文件每次旋转到另一个子目录中?


12

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

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

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

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

Answers:


9

您应该能够在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)有关两个指令的详细信息,请参见。


似乎可以解决问题postrotate。我需要添加的唯一内容是清除超过一定数量或早于某个日期的旧目录。
戴夫·福加克

1
查看最新答案。如果它们的最近修改超过7天,该find | xargs命令应该删除所有直接子目录/var/log/example
Ansgar Wiechers,2012年

1

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

从文档中:

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

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

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.