Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何停止或重新连接Erlang中的节点?_Erlang - Fatal编程技术网

如何停止或重新连接Erlang中的节点?

如何停止或重新连接Erlang中的节点?,erlang,Erlang,我是新来的二郎 目前,我创建了一个模块,帮助我将用户请求转发到apns库 我创建了一个gen_服务器模块,并将其添加到主管 今天,当我用erl-sname apns_服务器启动我的模块时 一切正常。但由于我暂停了终端一段时间,服务器关闭了连接 然后问题发生了。在与服务器建立新连接后,我无法启动新的erl-sname apns_服务器 错误消息说已经存在一个apns_服务器。我确实在epmd-names中看到了服务器名称 节点没有激活,因为我可以通过rpc:call发送请求以运行请求。但我不知道如

我是新来的二郎

目前,我创建了一个模块,帮助我将用户请求转发到apns库

我创建了一个gen_服务器模块,并将其添加到主管

今天,当我用erl-sname apns_服务器启动我的模块时

一切正常。但由于我暂停了终端一段时间,服务器关闭了连接

然后问题发生了。在与服务器建立新连接后,我无法启动新的erl-sname apns_服务器

错误消息说已经存在一个apns_服务器。我确实在epmd-names中看到了服务器名称

节点没有激活,因为我可以通过rpc:call发送请求以运行请求。但我不知道如何阻止它

由于该模块仍在开发中,我需要更新一些代码,然后重新启动它。我该怎么做?由于有其他Erlang服务在同一台机器上运行,我无法重新启动系统。是否有其他方法停止模块的Erlang节点? 多谢各位~~


Eric要连接到现有节点,请执行以下操作:

  • ssh连接到您的服务器
  • 使用新名称启动新的Erlang node+shell会话,但与您要联系的节点相同(
    erl-name some\u name-cookie some\u cookie
  • 在新的Erlang shell中,按
    ^G
    (即
    CTRL+G
    )打开终端命令界面
  • 输入命令字符串
    r其他\u节点_name@node.host
    远程连接到其他节点
  • j
    列出当前作业。将列出在您尝试联系的节点上生成的新shell
  • 输入
    c[远程shell的作业编号]
    以连接到要使用的节点上的新shell
  • 这是我的第一个节点,名为
    foo@changa.shinden.tsuriai.jp“

    ceverett@changa:~$ erl -name foo -cookie bar
    Erlang/OTP 20 [RELEASE CANDIDATE 2] [erts-9.0] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [hipe] [kernel-poll:false]
    
    Eshell V9.0  (abort with ^G)
    (foo@changa.shinden.tsuriai.jp)1>
    
    这是我的第二个节点,名为
    baz@changa.shinden.tsuriai.jp“
    ,我将使用它启动到另一个的远程shell连接。请注意,我已使用与上述相同的cookie(选项
    -cookie bar
    )启动此erl会话:

    ceverett@changa:~$ erl -name baz -cookie bar
    Erlang/OTP 20 [RELEASE CANDIDATE 2] [erts-9.0] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [hipe] [kernel-poll:false]
    
    Eshell V9.0  (abort with ^G)
    (baz@changa.shinden.tsuriai.jp)1>
    User switch command
     --> ?
      c [nn]            - connect to job
      i [nn]            - interrupt job
      k [nn]            - kill job
      j                 - list all jobs
      s [shell]         - start local shell
      r [node [shell]]  - start remote shell
      q                 - quit erlang
      ? | h             - this message
     --> r 'foo@changa.shinden.tsuriai.jp'
     --> j
       1  {shell,start,[init]}
       2* {'foo@changa.shinden.tsuriai.jp',shell,start,[]}
     --> c 2
    Eshell V9.0  (abort with ^G)
    (foo@changa.shinden.tsuriai.jp)1>
    
    注意我的提示在底部是如何变化的吗?就这些


    这在集群中连接的任何Erlang节点之间都有效,并且在使用长节点名运行EPMD的情况下,如果远程节点能够在网络上看到彼此,则它们将尝试彼此连接。在这种情况下,两个节点都在同一台主机上运行,但只要主机可以在网络上看到对方,其工作方式就相同。

    要连接到现有节点:

  • ssh连接到您的服务器
  • 使用新名称启动新的Erlang node+shell会话,但与您要联系的节点相同(
    erl-name some\u name-cookie some\u cookie
  • 在新的Erlang shell中,按
    ^G
    (即
    CTRL+G
    )打开终端命令界面
  • 输入命令字符串
    r其他\u节点_name@node.host
    远程连接到其他节点
  • j
    列出当前作业。将列出在您尝试联系的节点上生成的新shell
  • 输入
    c[远程shell的作业编号]
    以连接到要使用的节点上的新shell
  • 这是我的第一个节点,名为
    foo@changa.shinden.tsuriai.jp“

    ceverett@changa:~$ erl -name foo -cookie bar
    Erlang/OTP 20 [RELEASE CANDIDATE 2] [erts-9.0] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [hipe] [kernel-poll:false]
    
    Eshell V9.0  (abort with ^G)
    (foo@changa.shinden.tsuriai.jp)1>
    
    这是我的第二个节点,名为
    baz@changa.shinden.tsuriai.jp“
    ,我将使用它启动到另一个的远程shell连接。请注意,我已使用与上述相同的cookie(选项
    -cookie bar
    )启动此erl会话:

    ceverett@changa:~$ erl -name baz -cookie bar
    Erlang/OTP 20 [RELEASE CANDIDATE 2] [erts-9.0] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [hipe] [kernel-poll:false]
    
    Eshell V9.0  (abort with ^G)
    (baz@changa.shinden.tsuriai.jp)1>
    User switch command
     --> ?
      c [nn]            - connect to job
      i [nn]            - interrupt job
      k [nn]            - kill job
      j                 - list all jobs
      s [shell]         - start local shell
      r [node [shell]]  - start remote shell
      q                 - quit erlang
      ? | h             - this message
     --> r 'foo@changa.shinden.tsuriai.jp'
     --> j
       1  {shell,start,[init]}
       2* {'foo@changa.shinden.tsuriai.jp',shell,start,[]}
     --> c 2
    Eshell V9.0  (abort with ^G)
    (foo@changa.shinden.tsuriai.jp)1>
    
    注意我的提示在底部是如何变化的吗?就这些


    这在集群中连接的任何Erlang节点之间都有效,并且在使用长节点名运行EPMD的情况下,如果远程节点能够在网络上看到彼此,则它们将尝试彼此连接。在这种情况下,两个节点都在同一台主机上运行,但只要主机可以在网络上看到对方,它的工作方式就相同。

    谢谢,它可以工作。在我连接到节点之后。我设置了命令init:stop()。似乎节点现在已关闭。我是否使用正确的命令关闭节点@彭煥閎 是的,
    init:stop()
    使系统尽可能平稳地停止运行。谢谢,似乎我以前在工作线程中回复过,我找到了一种连接现有节点的新方法。选项-remsh可以做同样的事情,例如:erl-sname client-remshejabberd@newserver-api-001,我将在将来检查+R选项的兼容性问题。谢谢,它起作用了。在我连接到节点之后。我设置了命令init:stop()。似乎节点现在已关闭。我是否使用正确的命令关闭节点@彭煥閎 是的,
    init:stop()
    使系统尽可能平稳地停止运行。谢谢,似乎我以前在工作线程中回复过,我找到了一种连接现有节点的新方法。选项-remsh可以做同样的事情,例如:erl-sname client-remshejabberd@newserver-api-001,我将在将来检查+R选项以了解兼容性问题。