我有一个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