我还没有找到清除旧的tomcat或jboss日志或其他带有时间戳的日志的解决方案:catalog.log。/server.log。。基本上,这些日志由jboss轮换为:server.log,server.log.20131201,server.log.20131203,依此类推。
有什么方法可以使用logrotate删除早于n天的日志?我不想在postrotate或jboss / tomcat日志记录属性中使用find。我只想知道logrotate是否可以单独实现这一目标。我知道这不是很有效,但是我遇到了需要解决的问题。
如果你不想使用find
inside postrotate
,不可以,你不能。
logrotate
server.log
将由Tomcat / JBoss旋转的每个实例都视为一个不同的文件,并且由于它们是唯一的,因此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天之前的轮换文件。
这是一个很好的答案。我花了一段时间才找到它,但它应该在我搜索结果的顶部!!我确实遇到了以su开头的行的问题。我从配置中删除了它,但这似乎没有引起问题。
@Philippe我很高兴您发现我的回答很有用,在我找到满意的配置之前,经过了很多尝试和错误。该
su
关键字仅在您希望日志文件归运行该应用程序的用户/组所有时才有用。这很令人困惑,我已将其从答案中删除。并感谢您的纠正missingok
。什么
-mtime +180
意思@RyanLv的
-mtime +180
意思是“修改时间过去超过180天”。find
将匹配-name
选项中指定的名称超过180天的文件。请注意,类似UNIX的文件系统(包括macOS和Linux)在处理文件更改时通常具有两个不同的参考时间:change time,每次在文件状态信息(或更具体而言,inode信息,更改和更改)时都会设置该参考时间。修改时间,在修改文件内容时设置。有关更多信息,请参见unix.stackexchange.com/a/132661。