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

tom*_*lor 4 erlang elixir erlang-otp erlang-supervisor

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

我希望应用程序Supervisor在第一次启动时为每个用户启动一个worker ,并且我希望应用程序Supervisor在以后重新启动时执行相同操作,无论出于何种原因.

目前,我动态地启动所有的孩子中Applicationstart(type, args)回调,但如果Supervisor重新启动,不会启动所有的子进程.

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

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

Rog*_*mbe 6

我做到这一点的一种方法非常有效,就是使用另一个主管和一个"重启工作者".你的主管是新主管的孩子 - 它是重启工作者的兄弟.新主管使用one_for_allrest_for_one,如果您的主管死亡,重启工作人员也会重新启动.

重新启动重新启动工作程序时,它可以启动动态工作程序.