Tomcat catalina-deamon.out 日誌切割 每天生成一個檔案

weixin_34391854發表於2015-01-28

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
View Code

 

檢查是否配置好了自動執行配置 ,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

 

相關文章