天天看點

Linux下用cronolog切割Tomcat日志并删除指定天數前的日志記錄

使用cronolog工具切分Tomcat的catalina.out日志檔案

普通使用者下載下傳、安裝cronolog

<code>[tomcat@localhost ~]$ tar -xf cronolog-1.6.2.tar.gz</code>

<code>[tomcat@localhost ~]$ cd cronolog-1.6.2/</code>

<code>[tomcat@localhost cronolog-1.6.2]$  ./configure --prefix=/home/tomcat/cronolog</code>

<code>make</code>

<code>make install</code>

root使用者下下載下傳、安裝cronolog

<code>[root@localhost ~]# rpm -qa |grep cronolog</code>

<code>[root@localhost ~]# tar zxvf cronolog-1.6.2.tar.gz </code>

<code>[root@localhost ~]# cd cronolog-1.6.2</code>

<code>[root@localhost cronolog-1.6.2]# ./configure </code>

<code>[root@localhost cronolog-1.6.2]# make &amp;&amp; make install</code>

<code>[root@localhost cronolog-1.6.2]# which cronolog</code>

<code>/usr/local/sbin/cronolog</code>

在普通使用者的家目錄下編輯.bash_profile檔案裡添加“$HOME/cronolog/sbin”添加cronolog的安裝路徑

[tomcat@localhost ~]$ vi .bash_profile 

<code># .bash_profile                                                                                                                                                                               </code>

<code># Get the aliases and functions</code>

<code>if [ -f ~/.bashrc ]; then</code>

<code>        </code><code>. ~/.bashrc</code>

<code>fi</code>

<code># User specific environment and startup programs</code>

<code>PATH=$PATH:$HOME/bin:$HOME/cronolog/sbin</code>

<code>export PATH</code>

用which cronolog可以查到安裝的路徑,這個路徑待會在修改catalina.sh時會用到。

修改catalina.sh 檔案

将186行【CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out】修改成187行【CATALINA_OUT="$CATALINA_BASE"/logs/opres.%Y-%m-%d.out】内容,日志名可以自行定義;

注釋掉370行【touch "$CATALINA_OUT"】;

383、384行【

 org.apache.catalina.startup.Bootstrap "$@" start \

 &gt;&gt; "$CATALINA_OUT" 2&gt;&amp;1 "&amp;"】替換成385、386行【

org.apache.catalina.startup.Bootstrap "$@" start 2&gt;&amp;1 \

 | /home/tomcat/cronolog/sbin/cronolog "$CATALINA_OUT" &gt;&gt; /dev/null 2&gt;&amp;1 &amp;

】;

396、397行【

  org.apache.catalina.startup.Bootstrap "$@" start \

  &gt;&gt; "$CATALINA_OUT" 2&gt;&amp;1 "&amp;"

】替換成394、395行【

】;最後一步(394、395)要注意如果原本的指令隻是注釋掉,替換的内容一定要在原本内容的上面,不然無法正常啟動,前面的替換(383、384)位置沒有關系的

<code>97 JAVA_OPTS=</code><code>"-Xms512m -Xmx1024m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m"</code>

<code> </code><code>98 </code>

<code> </code><code>99 </code><code># OS specific support.  $var _must_ be set to either true or false.</code>

<code>185 </code><code>if</code> <code>[ -z </code><code>"$CATALINA_OUT"</code> <code>] ; </code><code>then</code>

<code>186   </code><code># CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out</code>

<code>187    CATALINA_OUT=</code><code>"$CATALINA_BASE"</code><code>/logs/opres</code><code>.%Y-%m-%d.out</code>

<code>370   </code><code>#touch "$CATALINA_OUT"</code>

<code>371   </code><code>if</code> <code>[ </code><code>"$1"</code> <code>= </code><code>"-security"</code> <code>] ; </code><code>then</code>

<code>372     </code><code>if</code> <code>[ $have_tty -</code><code>eq</code> <code>1 ]; </code><code>then</code>

<code>373       </code><code>echo</code> <code>"Using Security Manager"</code>

<code>374     </code><code>fi</code>

<code>375     </code><code>shift</code>

<code>376     </code><code>eval</code> <code>"\"$_RUNJAVA\""</code> <code>"\"$LOGGING_CONFIG\""</code> <code>$LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \</code>

<code>377       -Djava.endorsed.</code><code>dirs</code><code>=</code><code>"\"$JAVA_ENDORSED_DIRS\""</code> <code>-classpath </code><code>"\"$CLASSPATH\""</code> <code>\</code>

<code>378       -Djava.security.manager \</code>

<code>379       -Djava.security.policy==</code><code>"\"$CATALINA_BASE/conf/catalina.policy\""</code> <code>\</code>

<code>380       -Dcatalina.base=</code><code>"\"$CATALINA_BASE\""</code> <code>\</code>

<code>381       -Dcatalina.home=</code><code>"\"$CATALINA_HOME\""</code> <code>\</code>

<code>382       -Djava.io.tmpdir=</code><code>"\"$CATALINA_TMPDIR\""</code> <code>\</code>

<code>383      </code><code># org.apache.catalina.startup.Bootstrap "$@" start \</code>

<code>384      </code><code># &gt;&gt; "$CATALINA_OUT" 2&gt;&amp;1 "&amp;"</code>

<code>385        org.apache.catalina.startup.Bootstrap </code><code>"$@"</code> <code>start 2&gt;&amp;1 \</code>

<code>386         | </code><code>/home/tomcat/cronolog/sbin/cronolog</code> <code>"$CATALINA_OUT"</code> <code>&gt;&gt; </code><code>/dev/null</code> <code>2&gt;&amp;1 &amp;</code>

<code>387 </code>

<code>388   </code><code>else</code>

<code>389     </code><code>eval</code> <code>"\"$_RUNJAVA\""</code> <code>"\"$LOGGING_CONFIG\""</code> <code>$LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \</code>

<code>390       -Djava.endorsed.</code><code>dirs</code><code>=</code><code>"\"$JAVA_ENDORSED_DIRS\""</code> <code>-classpath </code><code>"\"$CLASSPATH\""</code> <code>\</code>

<code>391       -Dcatalina.base=</code><code>"\"$CATALINA_BASE\""</code> <code>\</code>

<code>392       -Dcatalina.home=</code><code>"\"$CATALINA_HOME\""</code> <code>\</code>

<code>393       -Djava.io.tmpdir=</code><code>"\"$CATALINA_TMPDIR\""</code> <code>\</code>

<code>394        org.apache.catalina.startup.Bootstrap </code><code>"$@"</code> <code>start 2&gt;&amp;1 \</code>

<code>395         | </code><code>/home/tomcat/cronolog/sbin/cronolog</code> <code>"$CATALINA_OUT"</code> <code>&gt;&gt; </code><code>/dev/null</code> <code>2&gt;&amp;1 &amp;</code>

<code>396     </code><code>#  org.apache.catalina.startup.Bootstrap "$@" start \</code>

<code>397     </code><code>#  &gt;&gt; "$CATALINA_OUT" 2&gt;&amp;1 "&amp;"</code>

<code>398   </code><code>fi</code>

可以通過./catalina.sh start 來檢視配置檔案是否正确;這樣在/usr/local/tomcat/logs每天會自動生成opres.%Y-%m-%d.out檔案,下面我們要做的是定期清理這些過期的檔案,我們可以通過crontab來實作

<code>[tomcat@localhost ~]$ </code><code>crontab</code> <code>-e</code>

<code>30 3 * * * </code><code>/bin/find</code> <code>/home/tomcat/openapi/logs/</code> <code>-mtime +7 -</code><code>type</code> <code>f -name </code><code>"opres*.*.out"</code> <code>-</code><code>exec</code> <code>/bin/rm</code> <code>-f {} \; </code>

<code>[tomcat@localhost ~]$ </code><code>crontab</code> <code>-l                                                   </code>

<code>30 3 * * * </code><code>/bin/find</code> <code>/home/tomcat/openapi/logs/</code> <code>-mtime +7 -</code><code>type</code> <code>f -name </code><code>"opres*.*.out"</code> <code>-</code><code>exec</code> <code>/bin/rm</code> <code>-f {} \;</code>

每天淩晨3點半執行清除7天之前過期日志

或者

#每天淩晨3點執行删除前7天的所有tomcat生成的日志檔案(切割的日志名字與原告先的一樣隻是加了日期catalina.%Y-%m-%d.out)

<code>0 3 * * * </code><code>/bin/find</code> <code>/opt/tomcat</code> <code>-mtime +7 -</code><code>type</code> <code>f -name</code><code>"catalina.*.out"</code> <code>-</code><code>exec</code> <code>/bin/rm</code> <code>-rf {} \;</code>

<code>0 3 * * * </code><code>/bin/find</code> <code>/opt/tomcat</code> <code>-mtime +7 -</code><code>type</code> <code>f -name </code><code>"catalina.*.log"</code><code>-</code><code>exec</code> <code>/bin/rm</code> <code>-rf {} \;</code>

<code>0 3 * * * </code><code>/bin/find</code> <code>/opt/tomcat</code> <code>-mtime +7 -</code><code>type</code> <code>f -name </code><code>"host-manager.*.log"</code><code>-</code><code>exec</code> <code>/bin/rm</code> <code>-rf {} \;</code>

<code>0 3 * * * </code><code>/bin/find</code> <code>/opt/tomcat</code> <code>-mtime +7 -</code><code>type</code> <code>f -name</code><code>"localhost.*.log"</code> <code>-</code><code>exec</code> <code>/bin/rm</code> <code>-rf {} \;</code>

<code>0 3 * * * </code><code>/bin/find</code> <code>/opt/tomcat</code> <code>-mtime +7 -</code><code>type</code> <code>f -name</code><code>" manager.*.log"</code> <code>-</code><code>exec</code> <code>/bin/rm</code> <code>-rf {} \;</code>

<code>上面有些覺得寫的太多,可以簡為寫成如下:</code>

<code>0 3 * * * </code><code>/bin/find</code> <code>/opt/tomcat/logs/</code><code>* -mtime +7 -</code><code>exec</code> <code>/bin/rm</code> <code>-rf {} \;</code>

指令說明:

/var/www/    是查找檔案的路徑。

-type f    是指定檔案類型為普通檔案。

-mtime +30    是指修改時間距離現在30天的檔案。

-exec rm -f    指執行删除比對出來的檔案并且不提示,有的系統需要帶單引号,有的不需要。将以上指令,添加到crontab中,即可實作定期删除了。

比如,每天的1點30分鐘實作删除,可以這樣:

#每天淩晨1點執行删除前30天的日志檔案

<code>0 1 * * * find /aa/tomcat6.0/logs/* -mtime +30 -exec rm -f {} \;</code>

<code></code>

      本文轉自ling118 51CTO部落格,原文連結:http://blog.51cto.com/meiling/1911769,如需轉載請自行聯系原作者

繼續閱讀