2016-08-18 45 views
0

我工作的腳本自動重新啓動Tomcat當OOM發生 的,我把這個arguement: XX:OnOutOfMemoryError='myscript.sh'腳本用於重新啓動Tomcat時內存

但是,當該腳本重新啓動Tomcat這是失敗,因爲stocket仍然是開放的而我殺死了tomcat PID

所以我試圖從myscript.sh啓動一個腳本,但這個新腳本(OOM.sh)仍然被stocket打開,所以什麼都不會改變。

我該如何繼續?

感謝

回答

0

也許你的腳本需要稍等一下,而不是立即試圖重新啓動Tomcat。

而不是寫你的腳本是這樣的:

#!/bin/sh 
export CATALINA_HOME=... 
export CATALINA_BASE=... 
$CATALINA_HOME/bin/catalina.sh start 

像這樣做,而不是:

#!/bin/sh 
export CATALINA_HOME=... 
export CATALINA_BASE=... 
export CATALINA_PID_FILE=... 
export PID=$(cat $CATALINA_PID_FILE) 
while [ "1" == "$(kill -0 $PID)" ]; do 
    sleep 1 
done 
$CATALINA_HOME/bin/catalina.sh start 

這會睡覺,直到Tomcat的已關閉。你可以添加一個超時時間,等待一段時間讓Tomcat完全關閉......也許類似於10秒。

+0

謝謝你的回覆。問題還在這裏,當腳本啓動時,他得到了同樣的文件描述符和stocket仍然是開放的 當我啓動tomcat 地址監聽運輸dt_socket:5007 java的7411根的4U的IPv4 43872 0t0 TCP *:5007(LISTEN) OOM.sh 7447根4u IPv4 43872 0t0 TCP *:5007(LISTEN) – sytolaw

+0

該評論是不可讀的。嘗試在腳本中添加一些調試以查看發生了什麼。 –