logrotate不会旋转catalina.out日志文件

12

我正在尝试使用logrotate按日自动轮换tomcat的catalina.out,即使我可以手动调用logrotate并且它可以正常工作。 我使用了所有可用的解决方案,但我无法使其轮换。 我正在使用基本上是RHEL 7的Oracle Linux 7.5。

这是我采取的步骤:

我创建了一个名为/etc/logrotate.d/tomee.conf的文件,其内容如下:

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

我可以手动执行日志轮转,使用sudo /usr/sbin/logrotate /etc/logrotate.conf可以正常工作。

我还尝试使用sudo /usr/sbin/logrotate -d /etc/logrotate.conf进行调试,输出没有错误。

    ...
    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
    ...

但它仍然不能每天自动执行。

我也知道logrotate正在运行,因为根据/var/lib/logrotate/logrotate.status的说法,其他日志正在轮换,但不包括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

请注意,有多个条目表明它已于12-11旋转,但是catalina.out自12-8以来就没有进行旋转,但它仍未旋转。

非常感谢任何帮助。谢谢。


你的配置中有“notifempty”。你的catalina.out文件是否为空?(如果你配置了日志属性,该文件应该为空。我的意思是,如果你将系统配置为将所有内容记录到正确的文件而不是写入System.out/System.err/Console)。 - Konstantin Kolinko
它绝对不是空的,在调试时可以看到它需要旋转日志。 - Justin
你是以哪个用户身份运行logrotate手动程序的?logrotate服务是以哪个用户身份运行的?尝试以服务相同的用户身份手动执行它,并在命令中添加“--verbose”标志以获取更多详细信息! - rfkortekaas
我尝试以用户定义的 su opc opc 运行,日志正确地进行了轮换。 - Justin
4个回答

6

虽然这是一个旧案例,但我认为我应该添加我的解决方案,因为它确实能够轮转日志文件,这也是最初的问题。

在我的情况下,我设置了/etc/logrotate.d/tomcat文件,方式与Justin在最初的问题中所做的方式大致相同:

/<apache-location>/tomcat/logs/catalina.out {
  daily    
  copytruncate
  rotate 180
  compress
  missingok
  maxsize 200M
}

我的Apache位置有点奇怪,所以请根据实际情况进行替换。 "rotate 180" 可以保存我的日志大约30天,如果我的数学没算错的话(24小时*30天=720小时-->如果每4小时旋转一次,则会产生720 / 4 = 180个日志文件)。但我通过普通的cronjob触发执行,如下:
0 */4 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat >> /var/log/cut.log 2>&1

为了每天轮换,只需将cronjob的第一部分调整为例如0 0 * * *(每天午夜)。
-vf选项用于打开详细模式(记录cron日志)并强制执行旋转。 /var/log/cut.log是我专门用于记录cron作业的文件。 >> / var / log / cut.log 2>&1可以省略。
我正在以root用户身份运行旋转/ cron作业。
在经历了很多麻烦之后,这在我的系统上似乎有效。不确定这是理想的解决方案,但至少我已经避免了catalina.out无限增长,这是我的主要目标,并且我认为也是最初问题的目标...

3

由于这篇文章被浏览次数较多,我将分享我找到的解决方法。

我无法让logrotate在catalina.out上工作,如果你正在寻找这个答案,很抱歉。

我所能做的就是停止生成catalina.out文件。为了实现这一点,我创建了一个名为setenv.sh的文件,放置在apache-tomee-plus-7.0.4 / bin目录下,并在其中加入了以下一行代码。

export CATALINA_OUT="/dev/null"

tomee启动时,在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 "&"

因此,为了在后台运行tomee,必须将其输出到文件中。将其输出到/dev/null可以让其输出到某个地方,但实际上输出的内容被丢弃了。


2
使用Apache的rotatelogs非常简单。 只需设置环境属性即可:
CATALINA_OUT_CMD="/usr/sbin/rotatelogs -f $CATALINA_BASE/logs/catalina.out.%Y-%m-%d.log 86400"

它将创建一个名为catalina.out的命名管道,以便在不重新启动Tomcat的情况下进行旋转。
有关更多信息,请参见catalina.sh文件。

1
rotatelogs是Apache HTTPD的一部分,因此它是一个外部依赖项。 - Attila Csipak

-4
从logrotate.status的输出可以清楚地看出,catalina.out没有被logrotate控制。
请在/etc/logrotate.conf文件中检查该行。
include /etc/logrotate.d

如果没有这行,请添加它。 只有当存在这行时,才会考虑在 /etc/logrotate.d 中添加的配置。

1
考虑到日志 /apache-tomee-plus-7.0.4/logs/catalina.out 需要轮换,这个片段怎么样? - Philipp Grigoryev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接