2014-09-01 76 views
0

我們有一臺服務器在遠程節點上運行。現在我們想添加一個新功能(由gen_ *實現)而不停止服務器。所以我使用rpc:call(Node,my_sup,start_link,[])來啓動監督器。但不幸的是,我發現管理員連接到本地shell而不是遠程節點,並且在rpc:call之後立即失敗(sup進程被終止)。如何在不重啓Erlang服務器的情況下啓動新添加的主管?

我只是想知道是否有任何其他方式動態地和遠程地啓動新添加的管理程序?

回答

1

總監必須始終與某件事掛鉤。通常,OTP應用程序在其start方法中產生了監督所有其他進程和其他主管的「根監督者」。它與進程啓動應用程序相關聯。

如果您有這樣的根監督員,您可以使用supervisor:start_child(SupRef, ChildSpec)SupRef是對「root supervisor」(可能是Pid或名稱)的引用,並且ChildSpec將是主管,您想要產生或gen_server本身。此功能是記錄在這裏:

http://www.erlang.org/doc/man/supervisor.html#start_child-2

如果沒有監督樹。您可以將新功能打包爲OTP應用程序,該應用程序在啓動時產生第一個管理員。

+0

謝謝。我將這個新功能打包爲一個應用程序,並且工作正常! – 2014-09-01 06:33:53

相關問題