2010-04-15 15 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

相关问题