The problem with Tomcat is that it is OS agnostic: those who do not understand unix are doomed to reinvent it.
Specifically Tomcat has its own substandard version of logrotate, which creates a new log file every day. Some times the archive is dated sometimes the live log is dated.
#! /bin/sh # # TPP 2013-02-21 # # Tomcat apps use a variety of loggers, mostly log4j. # These rotate, conflicting with logrotate the unix log rotation system. # # Some files eg catalina.out # are rotated to a backup containing a date eg catalina.2013-01-06.log # which can then be compressed with bz2 to catalina.2013-01-06.log.bz2 # cd /var/log/tomcat6 # 2013-02-21 date=`date --rfc-3339=date` year=`date +%Y` timestamp=`date` echo "${timestamp} Running ${0}" for f in $(find catalina* |grep -v bz2 |grep -v '$date' |grep $year) do echo "bzip2 $f" bzip2 $f done # However others are active whilst containing a date # so we will find all and not compress the most recent for l in 'localhost*' 'opt-db*' 'opt*' 'host-manager*' 'manager*' do previous="not_this_one" for f in $(find $l |grep -v bz2 |grep $year|sort) do if [ "${previous}" != "not_this_one" ] then echo "bzip2 ${previous}" bzip2 $previous fi previous=$f done done exit 0
Added /etc/cron.d/compress_crontab_logs
23 3 * * * root /etc/cron.daily/compress_tomcat_logs.sh
Tested on a fairly ancient SuSE and debian.
No comments:
Post a Comment