我还没有找到清除旧的tomcat或jboss日志或任何其他带时间戳的日志的解决方案:catalog.log。 /server.log。。基本上这些日志由jboss旋转为: server.log,server.log.20131201,server.log.20131203等。
有没有办法可以使用logrotate删除超过n天的日志?我不想在postrotate里面使用find或调整jboss / tomcat日志属性。我只想知道logrotate是否可以实现这一点。我知道这不是很有效率,但我遇到了一个问题,我需要回答这个问题。
答案 0 :(得分:7)
如果您不想在find
内使用postrotate
,请不要,
logrotate
将Tomcat / JBoss轮换的每个server.log
实例视为不同的文件,由于它们是唯一的,logrotate
只会将它们旋转一次。 maxage
- 删除超过n
天的轮换日志的指令 - 仅在要轮换日志文件时进行检查,以便maxage
仅执行一次并且无法保留跟踪文件的年龄。
但是,如果您改变主意使用find
,logrotate
可以帮助您简化Tomcat和JBoss创建的日志文件的管理。我使用它来压缩和删除旧文件,配置文件如下:
/path/to/logs/server.log.????-??-?? {
compress
compresscmd /usr/bin/bzip2
nocreate
nodateext
ifempty
missingok
rotate 1
size 0
start 0
lastaction
# Remove rotated files older than 180 days
find /path/to/logs -name 'server.log.????-??-??.0.bz2' -mtime +180 -exec rm {} \;
endscript
}
其中:
rotate 1
和compress
将server.log.20131201
重命名并压缩为server.log.20131201.0.bz2
。时间戳和0
扩展名之间的.bz2
来自start 0
。size 0
确保始终重命名和压缩文件。lastaction
块会删除超过180天的轮换文件。答案 1 :(得分:0)
logrotate可以管理您的日志旋转它们并最终保留有限数量的旋转日志。但是AFAIK它只能用于直接管理的日志。如果你的日志已被某些其他代理(即Tomcat本身)旋转,则logrotate无法执行任何操作,只是因为对其他内容执行的旋转一无所知。
所以答案是否定的,你不能使用logrotate删除不是自己管理的日志(我认为甚至不打算做那样的事情)。
答案 2 :(得分:0)
您可以将脚本放到/etc/cron.daily。例如:
cat /etc/cron.daily/tomcat-rotate-logs
#!/bin/sh
# erasing tomcat logs older then 7 days
for x in $(find /var/log/tomcat/ -type f -mtime +7);
do
rm "$x";
logger -t TOMCAT-ROTATE-LOGS "Erasing $x [done]";
done
或创建一个logrotate配置。例如: cat /etc/logrotate.d/tomcat
/var/log/tomcat/*.log {
su tomcat tomcat
copytruncate
daily
rotate 6
compress
missingok
}
" su tomcat tomcat" - 代表避免错误权限上的logrotate错误
答案 3 :(得分:0)
不确定@jaume的配置是否与当前正在写入的日志文件一起正确运行。特别是带有“ nocreate”选项。希望看到他对此的评论。 对于我来说,拒绝logrotate并在cron中仅使用bash脚本会更容易。 像这样:
#!/bin/bash
/usr/bin/find /path/to/logs/ -name 'server.log.????-??-??.gz' -mtime +7 -delete
/usr/bin/find /path/to/logs/ -name 'server.log.????-??-??' -mtime +1 -exec gzip -q {} \;