I haven't found a solution to purge old tomcat or jboss logs or any other timestamped logs: catalog.log./server.log.. Basically these logs are rotated by jboss as: server.log, server.log.20131201, server.log.20131203 and so on.
Is there a way I can use logrotate to delete logs older than n days? I don't want to use find inside postrotate or tweak jboss/tomcat logging properties. I just want to know if logrotate can actually achieve this on it's own. I know it's not very productive but I am stuck with a problem where I need answer for this.
If you don't want to use find
inside postrotate
, no, you can't.
logrotate
treats every instance of server.log
rotated by Tomcat/JBoss as a different file, and since they are unique, logrotate
will rotate them only once. maxage
- the directive that removes rotated logs older than n
days - is only checked if the logfile is to be rotated, so that maxage
is only executed once and can't keep track of the file's age.
However, if you change your mind about using find
, logrotate
can help you simplify the management of log files created by Tomcat and JBoss. I use it to compress and remove old files with a configuration file like this:
/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
}
where:
rotate 1
and compress
rename and compress, say, server.log.20131201
to server.log.20131201.0.bz2
. The 0
between the timestamp and the .bz2
extension comes from start 0
.size 0
makes sure that files are always renamed and compressed.lastaction
block removes rotated files older than 180 days.
This is such a great answer. It took me a while to find it, yet it should be at the top of my search results!! I did run into an issue with the line that start with su. I removed it from my configuration and that did not seem to cause problems.
@Philippe I'm glad you found my answer useful, there was quite a bit of trial and error until I found a satisfactory configuration. The
su
keyword is only useful if, as in my case, you want the log files to be owned by the user/group that runs the application. It is confusing and I've removed it from the answer. And thanks for correctingmissingok
.what does
-mtime +180
mean?@RyanLv
-mtime +180
means "modification time is more than 180 days in the past".find
will match files with the name specified in the-name
option that are older than 180 days. Note that UNIX-like file systems (that includes macOS and Linux) traditionally have two different reference times when dealing with changes in files: change time, which gets set every time when file status information, or more specifically, inode information, changes, and modification time, which is set when the file contents are modified. See unix.stackexchange.com/a/132661 for more information.