题
我最近跑进当整个二郎应用死亡的错误,产生看起来像这样的日志信息:
=INFO REPORT==== 11-Jun-2010::11:07:25 ===
application: myapp
exited: shutdown
type: temporary
我不知道是什么触发了此关机,但真正的问题我已经是它并没有重新启动。相反,现在空二郎山VM只是坐在那里什么都不做。
现在,从研究,我已经做了,它看起来像有其他的“启动类型”你可以给一个应用程序:“瞬时”和“永久”
如果我开始监事的在的应用程序,我可以告诉它来制作的特殊工艺的暂时或永久的,它会自动重新启动对我来说。然而,根据该文件,如果我做一个的应用的暂时或永久的,它没有当它死重新启动它,而是它杀死的所有其他的应用,以及
我真正想要做的就是以某种方式告诉二郎VM一个特定的应用程序应始终处于运行状态,如果出现故障,请重新启动。这是可能的吗?
(我不是在谈论实现我的应用程序之上的主管,因为那是一个catch 22:如果我的上司进程崩溃,我要找的某种API或设置,我可以用它来有二郎监测和重新启动我为我的应用程序。)
谢谢!
解决方案
您应该能够在顶层主管,解决这个问题:设置重启策略,允许每秒百万重新启动,应用程序应该永不死机。是这样的:
init(_Args) -> {ok, {{one_for_one, 1000000, 1}, [{ch3, {ch3, start_link, []}, permanent, brutal_kill, worker, [ch3]}]}}.
(实施例改编自 OTP设计原则用户指南。)
其他提示
您可以使用心脏重新启动整个虚拟机如果出现故障,则使用一个永久的应用程序类型,以确保虚拟机退出时,您的应用程序退出。
最后,你需要的东西,你的应用程序上面,你需要信任,无论是管理进程,二郎山VM,或者你写了一些shell脚本 - 它永远是一个问题,如果出现这种情况也失败
使用monit的,然后设置你的应用程序通过使用监督员为一个合理的启动频率整个应用程序终止。如果应用程序终止时,VM终止,并重新启动monit的一切。
我永远无法放弃的心是足够可靠的,因为它只是重启虚拟机一次,它不具有杀灭处理好-9 Erlang的虚拟机。