0

リモートノードでサーバーを実行しています。ここで、サーバーを停止せずに新しい機能 (gen_* によって実装) を追加したいと考えています。そこで、rpc:call(Node, my_sup, start_link, []) を使用してスーパーバイザを起動します。しかし残念ながら、スーパーバイザーがリモート ノードではなくローカル シェルにリンクされており、rpc:call の直後に失敗しました (sup プロセスが強制終了されました)。

新しく追加されたスーパーバイザーを動的かつリモートで起動する方法は他にあるのでしょうか?

4

1 に答える 1

1

スーパーバイザーは常に何かにリンクされている必要があります。通常、OTP アプリケーションはそのstartメソッド内で、他のすべてのプロセスと他のスーパーバイザーを監視する「ルート スーパーバイザー」を生成します。アプリケーションを起動するプロセスにリンクされています。

そのようなルート スーパーバイザがいる場合は、 を使用できますsupervisor:start_child(SupRef, ChildSpec)SupRef「ルートスーパーバイザー」(Pidまたは名前の場合があります)への参照であり、ChildSpecスポーンするスーパーバイザーまたはgen_server自体になります。この関数は、次の場所に文書化されています。

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

監視ツリーがない場合。新しい機能を OTP アプリケーションとしてパッケージ化し、起動時に最初のスーパーバイザーを生成することができます。

于 2014-09-01T06:18:51.653 に答える