Erlang主管重启间隔

kol*_*nov 7 erlang erlang-supervisor

我有一个具有one_for_one重启策略的主管.可以在子进程重启之间设置一些时间间隔吗?

Fe远程数据库被粉碎,我想在恢复连接尝试之间等待10秒.

Rob*_*loi 6

实际上,您可以让主管立即重新启动其子项并实现所谓的延迟初始化

  1. 主管(重新)启动(立即)子进程(例如,gen_server)
  2. gen_server 在其 init 函数中返回 0 超时
  3. 在 handle_info 中,您会主动等待(您的 10 秒)以确保正确初始化数据库

这样,您可以确保在正确初始化数据库后处理对 gen_server 的所有请求。

  • 问题是您 **不能** 指定重新启动尝试之间的时间间隔。在主管中没有办法做到这一点。@RobertoAloi 为您提供了一种解决方法,即主管立即重新启动服务器,就像它的方式一样,然后您在服务器内等待。 (3认同)
  • 我认为@Robert Aloi 的建议会奏效。gen_server 的 init 不会尝试重新连接,而是返回 0 超时,这将使监督者满意孩子已启动。然后,在 handle_info 函数中,您执行“真正的”初始化...休眠 10 秒后 (2认同)