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