Tomcat 使用 jsvc 以守護程式的方式啟動(daemon.sh )。這樣tomcat自身將會生成另外一個日誌檔案(catalina-daemon.out),而不是之前的catalina.out,而且catalina-daemon.out日誌不會自動切割,會越來越大。
以前遇到過一個問題,就是網站突然訪問空白,排查到最後發現是當前進行了網站打包備份操作,有一個超過2GB的壓縮包。刪掉後立馬頁面訪問正常。具體原因還不清楚。
同時從運維角度和日誌分析角度思考,日誌檔案最好做切割處理,並日志檔案不宜過大。
想了想,還是使用linux的crontab的定時任務吧,
編寫一個shell指令碼,指令碼放到 /etc/cron.daily目錄下,程式碼如下:
#!/bin/bash thedate=`date --rfc-3339=date` predate=`date +%Y-%m-%d --date="-7 day"` rmfile="/xxxx/server/tomcat/logs/catalina-daemon.${predate}.out" outfile="/xxxx/server/tomcat/logs/catalina-daemon.out" if [ -f ${rmfile} ];then rm -f ${rmfile} fi if [ -f ${outfile} ];then cp ${outfile} /xxxx/server/tomcat/logs/catalina-daemon.${thedate}.out echo "" > ${outfile} fi exit 0
#!/bin/bash thedate=`date --rfc-3339=date` predate=`date +%Y-%m-%d --date="-7 day"` rmfile1="/xxxxx/server/tomcat/logs/catalina-daemon.${predate}.out" rmfile2="/xxxxx/server/tomcat/logs/p2p.log.${predate}" rmfile3="/xxxxx/server/tomcat/logs/localhost.${predate}.log" rmfile4="/xxxxx/server/tomcat/logs/host-manager.${predate}.log" rmfile5="/xxxxx/server/tomcat/logs/catalina.${predate}.log" outfile="/xxxxx/server/tomcat/logs/catalina-daemon.out" for rmfile in "${rmfile1}" "${rmfile2}" "${rmfile3}" "${rmfile4}" "${rmfile5}" do if [ -f ${rmfile} ];then rm -f ${rmfile} fi done if [ -f ${outfile} ];then cp ${outfile} /xxxxx/server/tomcat/logs/catalina-daemon.${thedate}.out echo "" > ${outfile} fi exit 0
檢查是否配置好了自動執行配置 ,cat /etc/crontab,沒有就加行下文的紅色部分。
[root@xxxxServer /]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed #run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily //每天執行/etc/cron.daily內的指令碼 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
檢視crond服務是否執行:
pgrep crond
或
/sbin/service crond status
或
ps -elf|grep crond|grep -v "grep"
crond服務操作命令:
/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置
設定crond隨機啟動
chkconfig crond on 235
好了,現在就不用擔憂日誌檔案過大問題了!
同時上面的指令碼會每天執行一次,並刪除七天之前的日誌檔案,具體時間,可自己設定。
PS:
http://www.cnblogs.com/xd502djj/archive/2010/12/29/1919478.html
http://www.jb51.net/article/34332.htm
http://www.cnblogs.com/panblack/archive/2013/05/30/split_tomcat_catalina_out.html
http://desert3.iteye.com/blog/1393541