Auto Rotate Tomcat Logs with Logrotate
由于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
好贴,解决了问题!