我有一個jar,它在運行時瀏覽目錄中的文件並在退出之前處理其中的10個文件。在shell腳本崩潰後可靠地重新啓動java進程
我有一個shell腳本,它看起來是這樣的:
while true;
do java -jar myjar.jar
sleep2;
done
我有一個運行在啓動前一個像這樣另一個shell腳本:
nohup loopscript.sh > /var/log/error.log
的問題是,有時當它需要比系統更多的內存時,jar崩潰,整個循環似乎停止運行。當內存上限被擊中時,我的日誌文件以堆棧跟蹤結束。
如何在碰撞後可靠地重新啓動循環?我讀elsewhere on SO像做
until myserver; do
echo "Server 'myserver' crashed with exit code $?. Respawning.." >&2
sleep 1
done
但如果MYSERVER本身就是一個循環,我故意停止罐10次運行後強制垃圾回收和減少中途死機的機會,這僅適用。我的邏輯是否有缺陷?我應該把jar放到一個循環中,並使用上面的方法在崩潰時重新啓動它?
你限制自己的10個文件,每次運行,由於內存?這聽起來像是Java程序中的一個糟糕的內存泄漏。 – 2012-02-09 00:48:47
該程序不會泄漏 - 我已經在成千上萬的文件中測試過它。我只是有一種預感,即退出並每隔幾秒重新啓動一次,而不是保持它永久運行便宜。我誤導了嗎? – Ben 2012-02-09 01:06:35