由于CentOS 6.6上的Tomcat 6采用了jsvc来启动,导致日志文件不能自动分割。Google找到相关文章,介绍采用系统自带的Logrotate来解决此问题:

How to rotate Tomcat catalina.out
http://www.vineetmanohar.com/2010/03/howto-rotate-tomcat-catalina-out/

Logrotate的相关介绍,还是看看中文的吧:
linux下logrotate 配置和理解
http://blog.csdn.net/cjwid/article/details/1690101

被遗忘的Logrotate
http://huoding.com/2013/04/21/246

一般来说,按照文章进行配置就完事了。Logrotate已经设置在/etc/cron.daily,每日自动执行。但是发现Logrotate仍不能正常工作。Google查到以下文章,才知道是服务器上启用了SELinux,权限问题没解决好:

I am getting 'logrotate: ALERT exited abnormally with [1]' messages in logs when SELinux is in the Enforcing mode
https://access.redhat.com/solutions/39006

关于CentOS上的SELinux操作,详见官方WiKi:
https://wiki.centos.org/zh/HowTos/SELinux

最后,关于权限问题,解决如下:
1)检查新增的配置文件的权限,是否跟原有的配置文件一致。如不一致,需修正。

ls -Zalh /etc/logrotate.d/

2)把需要切割的日志文件以及日志文件所在的目录,都设置SELinux的var_log_t类型权限(注意tomcat路径需改为实际路径),就解决权限的问题了:

chcon -t var_log_t /usr/local/tomcat/logs
chcon -t var_log_t /usr/local/tomcat/logs/*


注意:遇到Logrotate不能正常工作时(注意,本文的操作系统是CentOS 6.6),可以按照以下步骤排错:
1)Logrotate以Debug模式(只显示执行结果,不进行实际操作)执行一下,测试配置文件是否有误

/usr/sbin/logrotate -dv /etc/logrotate.conf

2)检查日志文件/var/log/messages,看Logrotate执行时是否有报错

cat /var/log/messages | grep logrotate

3)Logrotate每日操作的操作日志,会记录在/var/spool/mail/root,从该文件可以查看更详细的错误。

4)如第3点有权限相关的报错,检查权限记录日志/var/log/audit/audit.log,看有没有Logrotate的权限错误日志。通常会提示哪些日志文件是否存在权限不足导致不能访问。

cat /var/log/audit/audit.log | grep logrotate


标签: CentOS, tomcat, logrotate, selinux

仅有一条评论

  1. 马

    好贴,解决了问题!

添加新评论