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

Starting dynamic simple_one_for_one workers after supervisor starts

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

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

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

如何确保在 Supervisor starts/restart 之后随时启动所有动态子工作程序?

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

我完成此工作的一种方法非常有效,是使用另一位主管和 "restart worker"。您的主管是新主管的 child -- 它是重启工人的兄弟姐妹。新主管使用 one_for_allrest_for_one,这样如果您的主管死了,重启的工作人员也会 重新启动。

restart worker重启时,可以启动动态worker。