我们在远程节点上运行服务器。现在我们想要在不停止服务器的情况下添加新功能(由gen_ *实现)。所以我使用rpc:call(Node,my_sup,start_link,[])来启动主管。但不幸的是,我发现主管链接到我的本地shell而不是远程节点,并且在rpc:call之后它立即失败(sup进程被杀死)。
我只是想知道有没有其他方法可以动态和远程启动新添加的主管?
答案 0 :(得分:1)
主管总是必须与某事联系起来。通常,OTP应用程序在其start
方法中产生" root supervisor"监督所有其他流程和其他主管。它与启动应用程序的流程相关联。
如果您有这样的根管理员,则可以使用supervisor:start_child(SupRef, ChildSpec)
。 SupRef
是对"根管理员的引用" (它可能是Pid或名称)并且ChildSpec
将是主管,您想要生成或gen_server本身。此功能记录在此处:
http://www.erlang.org/doc/man/supervisor.html#start_child-2
如果你没有监督树。您可以将新功能打包为OTP应用程序,该应用程序会在启动时生成第一个主管。