我有一个名为 Supervisor
监督很多simple_one_for_one
worker ,它们定期为我系统上的每个用户执行任务。
我希望应用程序在 Supervisor
时为每个用户启动一名工作人员第一次启动,如果 Supervisor
,我希望应用程序也能这样做无论出于何种原因,都将在以后重新启动。
目前我在 Application
中动态启动所有 child 的 start(type, args)
回调,但如果 Supervisor
重新启动,这不会启动所有子进程。
如何确保在 Supervisor
之后立即启动所有动态子工随时启动/重启?
(我的应用程序在 Elixir 中,但同样的原则适用于 Erlang。)
最佳答案
我这样做的一种方法是使用另一个主管和一个“重启 worker ”。你的主管是新主管的 child ——它是重启 worker 的 sibling 。新主管使用 one_for_all
或 rest_for_one
,这样如果你的主管死了,重启 worker 也会重新启动。
当restart worker重新启动时,它可以启动动态worker。
关于erlang - 主管启动后启动动态 simple_one_for_one worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36792475/