[英]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 开始孩子吗? 有没有更好的方法来设计这个?
simple_one_for_one
主管的重启策略更改为#{strategy => simple_one_for_one,
intensity => 0,
period => 1}
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.