logrotate滚动日志失败
生产环境的catalina.out日志是在太大了,半个月就能积累到30多G,而且项目还在实施阶段,日志还挺重要,不能关。
网上看了一堆解决方案,有的干脆配置tomcat,使其不生成catalina.out,还有的是把tomcat的输出重定向到/dev/null。
试了一下都不靠谱,要么不生效,要么风险太大。文章都是抄来抄去,毛病一大堆。
最后还是选择logrotate来管理日志。
配置如下,放在/etc/logroatete.d目录下,就能自动滚动日志了。
/usr/java/apache-tomcat-7.0.54/logs/catalina.out{
daily
dateext
compress
copytruncate
rotate 10
create 644 root root
}
用logrotate -vf 试了下,没问题,于是兴致勃勃地在10台服务器上都复制了这个配置。
然而诡异的问题出现了,这10台服务器中,只有1台成功回滚了日志,其他都是失败的。
问了运维,说是10台服务器都是克隆的,没道理有不一样的地方。于是看了系统日志,发现logrotate报错了:
logrotate: ALERT exited abnormally with [1]
网上查了资料,发现最靠谱的是这一篇:https://access.redhat.com/solutions/39006
原来是selinux的策略,会防止logrotate操作/var/log以外的日志文件。
回头看了下配置,果然生效的那一台刚好关了selinux。