在启动时启动java进程,死机时自动重启

我有两个要求我的Java应用程序。 如果它死了,重新启动它。 如果服务器重新启动,重新启动它 – 很简单。 在这里使用答案我有一个脚本,将在Java应用程序死亡时重新启动。

 #!/斌/庆典

直到java -Xms256m -Xmx768m -jar MyApp.jar; 做
    回声“MyApp崩溃与退出代码$?。Respawning ...”>&2
    睡5
 DONE

我可以用“nohup restart_script.sh&”来运行它,它会整天运行而没有问题。 现在为启动要求。 我使用/etc/init.d/crond脚本,并用脚本replace了crond二进制文件,但在启动时挂起。

 #!/斌/庆典
 #
 #我的应用程序的初始化文件。
 #
 。  /etc/init.d/functions

 MYAPP = restart_script.sh
 PID_FILE =在/ var /运行/ myapp.pid

开始(){
        回声-n“启动我的应用程序”
        守护进程 - 用户appuser $ MYAPP
         RETVAL = $?
        回声
         [$ RETVAL -eq 0] && touch / var / lock / subsys / myapp
        返回$ RETVAL
 }

停止(){
        回声-n“停止我的应用程序”
         killproc $ MYAPP
         RETVAL = $?
        回声
         [$ RETVAL -eq 0] && rm -f / var / lock / subsys / myapp
        返回$ RETVAL
 }

 ...

在“1美元”的情况下
    开始)
        开始
         ;;
    停止)
        停止
         ;;
 ...
 ESAC

当我运行/ sbin / service myapp启动脚本启动,但挂起控制台。 我已经尝试了“守护进程 – 用户appuser nohup $ MYAPP&”,我立即返回提示没有任何[确定]指示,当我做了一个ps,我仍然看到init被挂起。 任何想法如何在初始化脚本中调用脚本并使其正确返回?

谢谢,

格雷格

我的机器上的守护进程功能(旧的RedHat)不会返回,直到执行的程序返回。 所以你将需要有你的小实用程序脚本分叉。

尝试像这样写你的工具:

#!/bin/bash ( until java -Xms256m -Xmx768m -jar MyApp.jar; do echo "MyApp crashed with exit code $?. Respawning... " >&2 sleep 5 done ) & 

这是如何工作的。 把一个命令放在圆括号中开始代码在一个新的进程中运行。 你把这个进程放在后台,这样原来的进程不用等待就可以返回。

你需要一个Java服务包装,这是一个很好的… 狸
我的意思是说,你不需要重新发明轮子,那里有工具。