4

少数の gen_servers を監視する単一のスーパーバイザで構成される OTP アプリケーションがあります。典型的な子仕様は次のとおりです。

{my_server,
  {my_server, start_link, [123]},
  permanent, 
  5000, 
  worker,
  [my_server]}

これまでのところ問題はありません。

上記と同じモジュール Module/Fn を使用して、スーパーバイザー構造に余分な gen_server を追加したいのですが、引数は異なります。

{my_server_2,
  {my_server, start_link, [123]},
  permanent, 
  5000, 
  worker,
  [my_server_2]}

私はこれがうまくいくと思ったが、いいえ:

=SUPERVISOR REPORT==== 15-Apr-2010::16:50:13 ===
     Supervisor: {local,my_sup}
     Context:    start_error
     Reason:     {already_started,<0.179.0>}
     Offender:   [{pid,undefined},
                  {name,my_server_2},
                  {mfa,{my_server,start_link,[]}},
                  {restart_type,permanent},
                  {shutdown,5000},
                  {child_type,worker}]

各子仕様の 2 番目の要素のモジュール引数は異なる必要がありますか?

ありがとう、

ジャスティン

4

1 に答える 1

8

私の推測では、my_server は gen_server:start_link/4 を使用してその名前を登録するため、2 番目のサーバーが起動しようとすると、名前が既に使用されているため起動できません。gen_servers は、名前なし (gen_server:start_link/3) で開始するか、別の名前で開始する必要があります。

ワーカーが使用するモジュールのリストを識別する子仕様の最後の要素を変更するのは奇妙に思えます。これは本当にあなたが意図したものですか?

于 2010-04-15T16:51:45.357 に答える