2010-04-15 20 views
3

我有一個OTP應用程序,由一個監督少數gen_servers的監督者組成。一個典型的兒童規格如下:使用相同的模塊/不同的參數監督多個gen_servers

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

到目前爲止沒有問題。

我現在想的添加額外gen_server向上司結構,使用相同的模塊模塊/ FN如上,但不同的參數,如

{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}] 

每個子規範的第二個元素中的模塊參數需要不同嗎?

感謝,

賈斯汀

回答

6

我的猜測是,我的_服務器使用註冊使用gen_server它的名字:所以當第二個嘗試啓動它不能因爲名稱已被START_LINK/4, 。 gen_servers要麼必須沒有名稱(gen_server:start_link/3)或使用不同的名稱來啓動。

改變子規範的最後一個元素似乎很奇怪,它標識了worker所使用的模塊列表。這真的是你想要的嗎?

+0

你說得對。我在gen_server中硬編碼了服務器名稱。感謝您的線索。 – Justin 2010-04-15 19:12:59

相關問題