日志旋转不工作

日志旋转不工作

我想为我的 Tomcat 服务器的 catalina.out 日志文件设置每日日志轮换,但它不起作用 - 我还没有看到创建的轮换日志文件。
为了排除故障,我跑了logrotate -d /etc/logrotate.conf并得到以下结果:

rotating pattern: /usr/local/tomcat/logs/catalina.out  5242880 bytes (7 rotations)
empty log files are rotated, old logs are removed
considering log /usr/local/tomcat/logs/catalina.out
  log needs rotating
rotating log /usr/local/tomcat/logs/catalina.out, log->rotateCount is 7
dateext suffix '-20151223'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
copying /usr/local/tomcat/logs/catalina.out to /usr/local/tomcat/logs/catalina.out-20151223
truncating /usr/local/tomcat/logs/catalina.out
compressing log with: /bin/gzip 

看起来一切都正常,没有任何错误。然而,没有结果:

[root@gec logrotate.d]# ls -lrth /usr/local/tomcat/logs/cata*
-rw-r--r-- 1 root root  398 Dec  4 17:48 /usr/local/tomcat/logs/catalina.2015-12-04.log
-rw-r--r-- 1 root root 109M Dec 23 17:21 /usr/local/tomcat/logs/catalina.out 

我的/etc/logrotate.conf:

daily

rotate 7

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d 

我的/etc/logrotate.d/tomcat:

/usr/local/tomcat/logs/catalina.out {
    copytruncate
    daily
    rotate 7
    compress
    missingok
    size 5M
}  

怎么了?

更新:

有趣的是,跑步logrotate -f /etc/logrotate.conf创建旋转 gzip 文件!

[root@gec logrotate.d]# ls -lrth /usr/local/tomcat/logs/cata*
-rw-r--r-- 1 root root  398 Dec  4 17:48 /usr/local/tomcat/logs/catalina.2015-12-04.log
-rw-r--r-- 1 root root 1.1M Dec 23 17:26 /usr/local/tomcat/logs/catalina.out-20151223.gz
-rw-r--r-- 1 root root 109K Dec 23 17:27 /usr/local/tomcat/logs/catalina.out

但是,我怎么知道每日的 cron 任务是否会起作用呢?

答案1

logrotate -d /etc/logrotate.conf你带着争论奔跑-d

参数-d是调试模式,你可以说是一种“干运行”。它只会为您提供日志旋转是否有效的信息,但不会旋转日志。

logrotate -f由于-f参数指定 logrotate 来强制 logrotate,因此有效。

引用自手册对数旋转:

  • -d,--调试

    打开调试模式并暗示 -v。在调试模式下,不会对日志或 logrotate 状态文件进行任何更改。

  • -f, --force 告诉 logrotate 强制轮换,即使它认为这没有必要。有时,在将新
    条目添加到 logrotate 配置文件后,或者如果已手动删除旧日志文件,这会很有用
    ,因为将创建新文件,并且日志记录
    将正确继续。

如果logrotate -d /etc/logrotate.conf给你的输出表明日志将被旋转和压缩,那么当 logrotate 遍历你的配置文件时,它肯定会旋转它。

答案2

还有另一个问题作为声称的重复链接到这个问题,但实际上有一个非常不同的答案。

这个问题的答案只有在 Tomcat 作为用户“root”运行时才有效,这是一种很差的安全实践。根据最佳实践,如果 Tomcat 以用户 tomcat:tomcat 的身份运行,则 catalina.out 文件也将归 tomcat:tomcat 所有。在这种情况下,logrotate 将不会旋转 catalina.out。

要解决此问题,您必须在 logrotate 配置中指定用户和组名称。因此,在这种情况下,您的 /etc/logrotate.d/tomcat 应修改为如下所示:

/usr/local/tomcat/logs/catalina.out {
    su tomcat tomcat
    copytruncate
    daily
    rotate 7
    compress
    missingok
    size 5M
}

答案3

在 /etc/logrotate.d/tomcat 中尝试 notifempty

相关内容