Nic*_*ick 5 erlang erlang-supervisor
我最近遇到了一个错误,整个Erlang应用程序死了,产生一条如下所示的日志消息:
=INFO REPORT==== 11-Jun-2010::11:07:25 ===
application: myapp
exited: shutdown
type: temporary
Run Code Online (Sandbox Code Playgroud)
我不知道是什么触发了这个关机,但我遇到的真正问题是它没有重启.相反,现在空的Erlang VM只是坐在那里什么都不做.
现在,根据我所做的研究,看起来还有其他"开始类型"你可以提供一个应用程序:'transient'和'permanent'.
如果我在应用程序中启动Supervisor ,我可以告诉它将特定进程设置为瞬态或永久性,并且它将自动为我重新启动它.但是,根据文档,如果我将应用程序设置为瞬态或永久性的,它不会在它死亡时重新启动它,而是它也会杀死所有其他应用程序.
我真正想做的是以某种方式告诉Erlang VM应该始终运行特定的应用程序,如果它发生故障,请重新启动它.这可能吗?
(我不是在谈论在我的应用程序之上实现一个主管,因为那是一个问题22:如果我的主管进程崩溃怎么办?我正在寻找某种API或设置,我可以使用它来使用Erlang监视器和为我重启我的申请.)
谢谢!
您应该能够在顶级主管中修复此问题:将重启策略设置为允许每秒 100 万次重启,并且应用程序永远不会崩溃。就像是:
初始化(_Args)->
{ok, {{one_for_one, 1000000, 1},
[{ch3, {ch3, start_link, []},
永久的,残酷的杀戮,工人,[ch3]}]}}。
(示例改编自OTP 设计原则用户指南。)