我有一个应用程序my_app.它还有一些其他依赖的应用程序.
my_app.app:
{application, my_app,
[ {description, "My App"},
{vsn, "0.0.1"},
{registered, []},
{applications, [some_dep1,
some_dep2]},
{mod, {my_app_app, []}},
{env, []}
]}.
Run Code Online (Sandbox Code Playgroud)
如果其中一个some_dep1或some_dep2未能启动,my_app也将无法启动.到现在为止还挺好.
但是,如果在运行系统期间出现问题并且some_dep1爆炸(在树上一直取出主管),erlang最终将终止该some_dep1应用程序; 但my_app没有被杀死,也没有得到通知(我可以找到)
有办法处理这个吗?理想情况下,我希望它重新启动(就像主管处理重启,阈值等),或者杀死任何依赖它的应用程序.
我目前的想法是轮询应用程序状态,但这似乎是一个巨大的黑客.
谢谢!
如果应用程序作为"永久"应用程序启动,则如果应用程序崩溃,整个Erlang节点将关闭.这是生成发布时的默认设置,但如果您正在使用application:start或application:ensure_all_started,则默认类型为temporary,这意味着应用程序只是默默地死亡,正如您所观察到的那样.尝试类似的东西:
application:start(some_dep1, permanent)
Run Code Online (Sandbox Code Playgroud)
要么
application:ensure_all_started(my_app, permanent)
Run Code Online (Sandbox Code Playgroud)
应用程序没有类似管理程序的东西:如果应用程序崩溃,则意味着其顶级管理程序崩溃,表明应用程序不知道它还可以做些什么来纠正问题.(如果重新启动应用程序可以解决问题,可以通过增加顶级管理程序中的重启限制来修复它.)下一级"监督"是心脏,如果它崩溃,它将重新启动Erlang节点.
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |