Dav*_*gac 13 log-files logging logrotate
我有一个包含许多日志文件的目录,我想每天轮换所有这些文件。出于组织目的,我希望能够将轮换的日志移动到按日期命名的不同目录(或子目录)中,保留最后一周的日志。
我可以使用 logrotate 通过就地旋转文件来实现大部分功能,甚至可以使用olddir指令将它们移动到一个不同的目录,但我无法找到解决方案来为每次旋转创建单独的子目录。我怎样才能做到这一点?:
Logs to rotate: /var/log/example/*
Desired target directories (keeping a week):
/var/log/example/20121006/*
[ ... ]
/var/log/example/20121012/*
Run Code Online (Sandbox Code Playgroud)
您应该能够在postrotate指令中调用外部脚本:
postrotate
/path/to/your.sh
endscript
Run Code Online (Sandbox Code Playgroud)
并让该脚本进行移动,例如:
#!/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
Run Code Online (Sandbox Code Playgroud)
但是,仅使用该dateext指令可能更容易。这样,旋转的文件将附加一个时间戳(尽管不会移动到不同的目录)。
logrotate(8)有关这两个指令的详细信息,请参阅。