tomcatapache-tomeerhel7logrotateoraclelinux

logrotate doesn't rotate catalina.out


I am trying to use logrotate to rotate out tomcat's catalina.out automatically on a daily basis even though I can manually call logrotate and it works fine. I am using I have tried every solution out there, but I cannot get it to rotate. I am on Oracle Linux 7.5 which is basically RHEL 7.

Here are the steps I have taken:

I created a file /etc/logrotate.d/tomee.conf that looks like this:

    /apache-tomee-plus-7.0.4/logs/catalina.out
    {
        su opc opc
        daily
        rotate 7
        compress
        notifempty
        missingok
        copytruncate
    }

I can manually execute the logrotate and it works just fine using sudo /usr/sbin/logrotate /etc/logrotate.conf

I also attempt to debug using sudo /usr/sbin/logrotate -d /etc/logrotate.conf and the output has no errors

    ...
    rotating pattern: /apache-tomee-plus-7.0.4/logs/catalina.out
     after 1 days (7 rotations)
    empty log files are not rotated, old logs are removed
    switching euid to 1000 and egid to 1000
    considering log /apache-tomee-plus-7.0.4/logs/catalina.out
      log needs rotating
    rotating log /apache-tomee-plus-7.0.4/logs/catalina.out, log->rotateCount is 7
    dateext suffix '-20181211'
    glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
    copying /apache-tomee-plus-7.0.4/logs/catalina.out to /apache-tomee-plus-7.0.4/logs/catalina.out-20181211
    truncating /apache-tomee-plus-7.0.4/logs/catalina.out
    compressing log with: /bin/gzip
    switching euid to 0 and egid to 0
    ...

But it still doesn't do it automatically daily.

I also know that logrotate is running because according to /var/lib/logrotate/logrotate.status, other logs are being rotated, but not catalina.out

    cat /var/lib/logrotate/logrotate.status
    logrotate state -- version 2
    "/var/log/yum.log" 2018-11-29-18:44:14
    "/var/log/up2date" 2018-9-17-19:0:0
    "/apache-tomee-plus-7.0.4/logs/catalina.out" 2018-12-8-0:37:14
    "/var/log/chrony/*.log" 2018-9-17-19:0:0
    "/var/log/wtmp" 2018-12-3-17:48:49
    "/var/log/spooler" 2018-11-29-18:44:14
    "/var/log/btmp" 2018-12-3-17:48:49
    "/var/log/iscsiuio.log" 2018-9-17-19:0:0
    "/var/log/maillog" 2018-12-11-3:7:1
    "/var/log/secure" 2018-12-11-3:7:1
    "/var/log/messages" 2018-12-11-3:7:1
    "/var/account/pacct" 2018-9-17-19:0:0
    "/var/log/cron" 2018-12-11-3:7:1

notice that there are multiple entries that say it was rotated on 12-11, but catalina.out wasn't rotated since 12-8, but it still isn't rotating.

Any help is greatly appreciated. Thanks.


Solution

  • Since this is getting a lot of views, I will let you all know the solution I found.

    I could not get logrotate to work on catalina.out, so sorry if that's what you're looking for.

    What I was able to do is stop catalina.out from ever getting generated. To do this, I created a file called setenv.sh in apache-tomee-plus-7.0.4/bin, and put this line in it

    export CATALINA_OUT="/dev/null"
    

    When tomee is started up, it looks something like this in catalina.sh

    eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
      -classpath "\"$CLASSPATH\"" \
      -Djava.security.manager \
      -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      >> "$CATALINA_OUT" 2>&1 "&"
    

    so outputting to a file seems necessary to run this tomee in the background. outputting to /dev/null lets it output somewhere, but it just goes nowhere