gpt4 book ai didi

erlang - 是否可以自动重启被杀死的 erlang 应用程序?

转载 作者:行者123 更新时间:2023-12-05 00:17:38 26 4
gpt4 key购买 nike

我有一个应用程序 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, []}
]}.

如果 some_dep1some_dep2启动失败, my_app也将无法启动。到现在为止还挺好。

但是,如果在运行系统过程中出现问题和 some_dep1炸毁(从树上一直干掉监督者),erlang 最终会杀死 some_dep1应用;但是 my_app 没有被杀死,也没有被通知(我可以找到)

有没有办法处理这个问题?理想情况下,我希望它重新启动(就像主管处理重新启动,阈值等),或者杀死任何依赖它的应用程序。

我目前的想法是轮询应用程序状态,但这似乎是一个巨大的黑客。

谢谢!

最佳答案

如果应用程序作为“永久”应用程序启动,那么如果应用程序崩溃,整个 Erlang 节点就会宕机。这是生成版本时的默认设置,但如果您使用 application:startapplication:ensure_all_started ,默认类型为 temporary ,正如您所观察到的,这意味着应用程序只是默默地终止。尝试类似:

application:start(some_dep1, permanent)

或者
application:ensure_all_started(my_app, permanent)

应用程序没有类似监督者的东西:如果一个应用程序崩溃,则意味着它的顶级监督者崩溃了,这表明应用程序不知道它还能做些什么来纠正问题。 (如果重新启动应用程序可以解决问题,那么它也可以通过增加顶级监控器中的重启限制来解决。)下一级“监控”是 heart ,如果它崩溃,它会重新启动一个 Erlang 节点。

关于erlang - 是否可以自动重启被杀死的 erlang 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39662510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com