我想为我的 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