非常教程

Erlang 20参考手册

ERTS

epmd

命令

EPMD

命令摘要

Erlang端口映射程序守护进程

描述

epmd [-d|-debug] [DbgExtra...] [-address Addresses] [-port No] [-daemon] [-relaxed_command_check]

启动端口映射程序守护进程。

epmd [-d|-debug] [-port No] [-names|-kill|-stop Name]

与正在运行的端口mapper守护进程通信。

该守护程序充当分布式Erlang计算中涉及的所有主机上的名称服务器。当一个Erlang节点启动时,该节点有一个名称,并从主机操作系统内核获取一个地址。名称和地址被发送到epmd在本地主机上运行的守护进程。在TCP / IP环境中,地址由IP地址和端口号组成。节点名称是表单上的一个原子Name@Nodeepmd守护进程的工作是跟踪哪个节点名称监听哪个地址。因此,epmd将符号节点名称映射到机器地址。

TCP / IP epmd守护进程只跟踪NameErlang节点名称的(第一个)部分。该Host部分(无论在之后@)隐含在epmd守护程序被联系到的节点名称中,以及可以到达Erlang节点的IP地址。因此,Erlang网络需要一致和正确的TCP命名服务才能正常运行。

启动端口映射程序守护进程

如果要分发节点并且没有正在运行的实例,守护进程将通过命令erl(1)自动启动。 如果必须使用自动启动的环境变量来更改守护程序的行为; 请参见环境变量部分。

如果-daemon未指定参数,epmd则使用启动的shell的控制终端作为普通程序运行。通常情况下,它将作为守护进程运行。

常规启动选项在章节中介绍Regular Options

这些DbgExtra选项在章节中介绍DbgExtra Options

与正在运行的端口映射器守护进程通信

epmd程序与正在运行的epmd守护程序进行通信主要是为了调试目的。

部分描述了不同的查询Interactive options

常规选择

这些选项在启动名称服务器时可用。名称服务器通常由命令自动启动erl(1)(如果尚不可用),但它也可以在系统启动时启动。

-address List

让这个epmd实例只在逗号分隔的IP地址列表上和回送地址上进行监听(如果未指定,则隐式地添加到列表中)。 这也可以使用环境变量ERL_EPMD_ADDRESS来设置; 请参见环境变量部分。

-port No

让此实例epmd监听另一个TCP端口,而不是默认的4369.这也可以使用环境变量来设置ERL_EPMD_PORT; 见部分Environment Variables

-d | -debug

启用调试输出。 指定的-d标志越多,您将获得的调试输出就越多(达到某个限制)。 当epmd守护进程未作为守护进程启动时,此选项非常有用。

-daemon

开始epmd从控制终端分离。日志记录在系统日志中可用并正确配置时结束。如果epmd守护进程在启动时启动,则必须使用此选项。当命令erl自动启动时也会使用epmd

-relaxed_command_check

epmd用宽松的命令检查启动程序(主要是为了向后兼容)。这会影响以下内容:

  • 通过宽松的命令检查,即使活动节点已注册,epmd守护进程也可以从本地主机中被杀死,例如,命令epmd -kill。通常只有具有空节点数据库的守护进程可以被杀死epmd -kill
  • 命令epmd -stop(和相应的消息epmd,如可以指定使用erl_interface:ei(3))通常始终被忽略。这是因为它可能会导致一个奇怪的情况,即同一名称的两个节点可能同时处于活动状态。节点只通过关闭连接来注销自己epmd,这就是为什么命令stop仅用于调试情况的原因。

通过启用宽松的命令检查,您可以强制取消注册活动节点。

ERL_EPMD_RELAXED_COMMAND_CHECK在启动之前,通过设置环境变量也可以启用轻松的命令检查epmd

只在交互使用非常有限的系统上使用轻松的命令检查。

DbgExtra选项

这些选项仅用于调试和测试epmd客户端。 它们不能用于正常操作。

-packet_timeout Seconds

设置epmd超时前连接可以处于不活动状态的秒数,并关闭连接。默认为60。

-delay_accept Seconds

要模拟繁忙的服务器,您可以在epmd获知有新连接请求和连接被接受时之间插入延迟。

-delay_write Seconds

也是一个繁忙的服务器的模拟。在发送回复之前插入延迟。

交互选项

这些选项使epmd作为交互式命令运行,显示将查询发送到已经运行的epmd实例的结果。 所联系的epmd始终在本地节点上,但如果多个正在使用主机上的不同端口运行,选项-port可用于在实例之间进行选择。

-port No

联系epmd监听指定的TCP端口号(默认4369)。 这也可以使用环境变量ERL_EPMD_PORT来设置; 请参见环境变量部分。

-names

列出当前正在运行的注册名称epmd

-kill

杀死当前正在运行的epmd

只有当epmd -names显示一个空数据库或者当启动运行的epmd实例时指定了-relaxed_command_check时,才允许运行正在运行的epmd。

注意-relaxed_command_check在启动守护程序时指定该守护程序在注册了活动节点时接受查杀。在epmd交互式运行时,-relaxed_command_check不起作用。在没有放宽命令检查的情况下启动的守护进程必须使用例如信号或某些其他特定于操作系统的方法(如果它具有注册的活动客户端)来终止。

-stop Name

强制从epmd数据库注销一个活动节点。

此命令只能在联系使用flag -relaxed_command_check开始的epmd实例时使用。

请注意,放宽的命令检查必须对epmd联系的守护进程启用。在epmd交互式运行时,-relaxed_command_check不起作用。

环境变量

ERL_EPMD_ADDRESS

可以设置为逗号分隔的IP地址列表,在这种情况下,epmd守护进程只会监听指定的地址和环回地址(如果未指定,则隐式添加到列表中)。默认行为是侦听所有可用的IP地址。

ERL_EPMD_PORT

可以包含epmd将使用的端口号。 在大多数情况下,默认端口可以正常工作。 可以指定一个不同的端口,以允许epmd的多个实例(代表独立的节点集群)共存于同一个主机上。 群集中的所有节点必须使用相同的epmd端口号。

ERL_EPMD_RELAXED_COMMAND_CHECK

如果在开始之前设置,则epmd守护进程的行为就像选项一样。-relaxed_command_check在启动时指定。因此,如果在启动Erlang虚拟机之前设置了此选项,则自动启动epmd接受-kill-stop没有限制的命令。

测井

在某些操作系统上赛斯洛时,将用于报告错误。epmd作为守护进程运行。要启用错误日志记录,您必须编辑/etc/syAdd.1-.conf文件并添加一个条目:

!epmd
*.*<TABs>/var/log/epmd.log

其中<TABs>至少有一个真正的制表符。空间被无声地忽略。

访问限制

epmd守护进程接受来自本地主机和远程主机的消息。但是,如果查询来自远程主机,则只有查询命令才会被应答(并采取行动)。如果客户机不是epmd运行实例的同一主机上的进程,则尝试注册节点名称始终是错误的。此类请求被认为是敌对的,并且连接立即关闭。

从远程节点接受以下查询:

  • 端口查询,即具有指定名称的节点侦听的端口。
  • 名称列表,即给出在主机上注册的所有名称的列表。

为了进一步限制访问,必须使用防火墙软件。

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1