在主管启动后启动动态simple_one_for_one工作人员

时间:2016-04-22 11:20:17

标签: erlang elixir otp supervisor

我有一个名为Supervisor,监督许多simple_one_for_one工作人员,他们定期为我的系统上的每个用户执行任务。

我希望应用在第一次启动Supervisor时为每个用户启动一个工作线,如果Supervisor稍后重新启动,我希望应用也这样做,无论什么原因。

目前我在Application的{​​{1}}回调中动态启动所有孩子,但如果start(type, args)重新启动,则不会启动所有子进程。< / p>

如何确保在Supervisor启动/重启后立即启动所有动态子工作者?

(我的应用程序在Elixir中,但同样的原则适用于Erlang。)

1 个答案:

答案 0 :(得分:6)

我做到这一点的一个方法非常有效,就是使用另一个主管和一个重新启动工作人员&#34;。你的主管是新主管的孩子 - 它是重启工作者的兄弟。新主管使用one_for_allrest_for_one,因此如果您的主管死亡,重启工作人员重新启动。

重新启动重新启动工作程序后,它可以启动动态工作程序。