java假死,但是程序還在,可以通過判斷一段時間内日志檔案是否有變化,來判斷java是否假死
shell腳本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<code>#!/bin/bash</code>
<code>#</code>
<code>#通過比較五分鐘前後,日志檔案md5值是否相同,來判斷日志檔案是否有變化,進而判斷java是否假死</code>
<code>#請根據實際情況,修改環境變量,項目路徑</code>
<code>#加入計劃任務執行</code>
<code>function</code> <code>RestartJava()</code>
<code>{</code>
<code>export</code> <code>JAVA_HOME=</code><code>/opt/apps/jdk1</code><code>.6.0_41</code>
<code>export</code> <code>PATH=$PATH:</code><code>/opt/apps/jdk1</code><code>.6.0_41</code><code>/bin</code>
<code>export</code> <code>CLASSPATH=.:$JAVA_HOME</code><code>/lib/tools</code><code>.jar:$JAVA_HOME</code><code>/lib/dt</code><code>.jar:$JAVA_HOME</code><code>/jre/lib/rt</code><code>.jar</code>
<code>JavaPath=</code><code>"/opt/apps/apache-tomcat-6.0.37"</code>
<code>JavaId=$(</code><code>ps</code> <code>-ef|</code><code>grep</code> <code>java |</code><code>grep</code> <code>$JavaPath |</code><code>grep</code> <code>-</code><code>v</code> <code>"grep"</code> <code>|</code><code>awk</code> <code>'{print $2}'</code><code>)</code>
<code>kill</code> <code>-9 $JavaId</code>
<code>cd</code> <code>$JavaPath</code><code>/bin</code> <code>&& </code><code>/bin/bash</code> <code>startup.sh</code>
<code>}</code>
<code>#while [ 1 ]</code>
<code>#do</code>
<code>First=`md5sum </code><code>/opt/shell/nohup</code><code>.out |</code><code>awk</code> <code>'{print $1}'</code><code>`</code>
<code>sleep</code> <code>300</code>
<code>Second=`md5sum </code><code>/opt/shell/nohup</code><code>.out |</code><code>awk</code> <code>'{print $1}'</code><code>`</code>
<code>if</code> <code>[[ $First == $Second ]]</code>
<code>then</code>
<code> </code><code>echo</code> <code>"start restart java"</code> <code>></code><code>/dec/null</code> <code>2>&1</code>
<code> </code><code>RestartJava</code>
<code>fi</code>
<code>#done</code>
本文轉自 穿越防火牆 51CTO部落格,原文連結:http://blog.51cto.com/sjitwant/1734238