繁体   English   中英

应该在哪里重新启动“simple_one_for_one”的孩子?

[英]Where should one restart `simple_one_for_one`'s children?

我有一个 Erlang 应用程序,其中我有一个simple_one_for_one主管,它监督一组进程,这些进程监视 web 页面上的变化(每个孩子一个 ZE6B391A8D2C4D45902A23A8B65857)。

在将有问题的主管添加到应用程序的顶级主管(以及其他一些进程)之后,我启动应该在我的应用程序行为的start function 中处于活动状态的孩子。 然后随着条目的添加/删除(并且条目被持久化到数据库中),子项会动态地启动和停止。

如果这个simple_one_for_one监管者因为太多的孩子崩溃(例如由于网络问题)而崩溃,监管者本身会重新启动,但它的孩子会丢失。 此时我想检查数据库并启动应该再次活动的孩子。

但是,我应该如何重新启动孩子? 我怎么知道主管重新启动了? 我应该安排从主管自己的start_link function 开始孩子吗? 有没有更好的方法来设计这个?

  1. simple_one_for_one主管的重启策略更改为
#{strategy => simple_one_for_one,
                 intensity => 0,
                 period => 1}
  1. 将孩子的(观察 web 页面变化的进程) terminate/2方法更改为
terminate(normal, _State) ->
  %% process terminated normally
  ok;
terminate(_Reason, _State) ->
  %% spawn the child again
  do_supverisor_start_child(),
  ok.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM