我有一个名为Supervisor
,监督许多simple_one_for_one
工作人员,他们定期为我的系统上的每个用户执行任务。
我希望应用在第一次启动Supervisor
时为每个用户启动一个工作线,如果Supervisor
稍后重新启动,我希望应用也这样做,无论什么原因。
目前我在Application
的{{1}}回调中动态启动所有孩子,但如果start(type, args)
重新启动,则不会启动所有子进程。< / p>
如何确保在Supervisor
启动/重启后立即启动所有动态子工作者?
(我的应用程序在Elixir中,但同样的原则适用于Erlang。)
答案 0 :(得分:6)
我做到这一点的一个方法非常有效,就是使用另一个主管和一个重新启动工作人员&#34;。你的主管是新主管的孩子 - 它是重启工作者的兄弟。新主管使用one_for_all
或rest_for_one
,因此如果您的主管死亡,重启工作人员也重新启动。
重新启动重新启动工作程序后,它可以启动动态工作程序。