我有一个Erlang应用程序,其中有一个simple_one_for_one
监督器,它监督一组监视网页变化的进程(每个孩子一个URL)。
在将所讨论的管理者添加到应用的顶级管理者(沿着其他一些进程)之后,我启动了应用行为的start
函数中应该处于活动状态的子进程。然后,随着条目的添加/删除(条目被持久化到DB中),子进程会动态地启动和停止。
如果这个simple_one_for_one
管理程序因为太多的子程序崩溃(例如,由于网络问题)而崩溃,管理程序本身会重新启动,但是它的子程序会丢失。此时,我想检查DB并重新启动应该处于活动状态的子程序。
但是,我应该如何重新启动子进程?我如何知道Supervisor已经重新启动?我应该从Supervisor自己的start_link
函数中调度启动子进程吗?有没有更好的设计方法?
1条答案
按热度按时间cnh2zyt31#
1.将
simple_one_for_one
管理程序的重启策略更改为1.将子进程(监视网页中更改的进程)的
terminate/2
方法更改为