我有两个要求我的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服务包装,这是一个很好的… 狸
我的意思是说,你不需要重新发明轮子,那里有工具。