非常教程

Erlang 20参考手册

核心 | kernel

heart

模块

heart

模块摘要

Erlang运行时系统的心跳监视。

描述

这些模块包含heart进程的接口。heart定期发送心跳到外部端口程序,该程序也被命名heartheart端口程序的目的是检查它所监控的Erlang运行时系统是否仍在运行。如果端口程序在HEART_BEAT_TIMEOUT几秒钟内没有收到任何心跳(默认为60秒),则系统可以重新启动。

一个由心脏程序监控的Erlang运行时系统将通过命令行标志启动-heart(另请参阅erl(1))。该heart过程然后自动启动:

% erl -heart ...

如果由于缺少心跳信号或终止的Erlang运行时系统而要重启系统,则HEART_COMMAND必须在系统启动之前设置环境变量。如果未设置此变量,则会打印警告文本,但系统不会重新启动。

要在Windows上重新启动,HEART_COMMAND可以设置为heart -shutdown(包含在Erlang交付中)或其他任何可以激活重新启动的合适程序。

环境变量HEART_BEAT_TIMEOUT可用于配置心脏超时;它可以在Erlang启动或在命令行指定之前在操作系统shell中设置:

% erl -heart -env HEART_BEAT_TIMEOUT 30 ...

该值(以秒为单位)必须在10 <X <= 65535的范围内。

请注意,如果系统时钟调整的时间超过了HEART_BEAT_TIMEOUT秒,则heart超时并尝试重新启动系统。例如,如果通过使用网络时间协议(NTP)自动调整系统时钟,就会发生这种情况。

如果发生碰撞,一个erl_crash.dump写,除非环境变量ERL_CRASH_DUMP_SECONDS设置:

% erl -heart -env ERL_CRASH_DUMP_SECONDS 10 ...

如果需要定期核心转储,请heart通过使用环境变量将kill信号设置为中止来告知HEART_KILL_SIGNAL=SIGABRT。如果未设置或未设置SIGABRT,则默认行为是使用SIGKILL以下命令的kill信号:

% erl -heart -env HEART_KILL_SIGNAL SIGABRT ...

如果心脏应该杀Erlang运行时系统,这可以通过使用环境变量来表示HEART_NO_KILL=TRUE。如果由心脏执行的命令处理此操作,例如作为特定清理序列的一部分,这可能很有用。如果未设置或未设置TRUE,则默认行为将如上所述进行终止。

% erl -heart -env HEART_NO_KILL 1 ...

此外,ERL_CRASH_DUMP_SECONDS有以下行为heart

ERL_CRASH_DUMP_SECONDS=0

禁止完全写入崩溃转储文件,从而立即重新启动运行时系统。这与不设置环境变量相同。

ERL_CRASH_DUMP_SECONDS=-1

将环境变量设置为负值不会重新启动运行系统,直到崩溃转储文件完整写入。

ERL_CRASH_DUMP_SECONDS=S

heart等待S几秒钟让崩溃转储文件写入。经过S秒,heart重新启动运行时系统,故障转储文件是否写入与否。

在下面的描述中,badarg如果heart没有启动,所有功能都会失败。

数据类型

heart_option() = check_schedulers

出口

set_cmd(Cmd) -> ok | {error, {bad_cmd, Cmd}}

类型

设置临时重新启动命令。如果HEART_COMMAND要使用非环境变量指定的名称重新引导系统,则使用此命令。新的Erlang运行时系统使用(如果行为不当)环境变量HEART_COMMAND重启。

限制:命令字符串作为ISO Latin-1或UTF-8编码二进制文件Cmd发送到heart程序,具体取决于模拟器的文件名编码模式(请参阅参考资料file:native_name_encoding/0)。编码二进制的大小必须小于2047字节。

clear_cmd() -> ok

清除临时启动命令。如果系统终止,HEART_COMMAND则使用正常进行重新启动。

get_cmd() -> {ok, Cmd}

类型

获取临时重新启动命令。如果该命令被清除,则返回空字符串。

set_callback(Module, Function) ->

ok | {error, {bad_callback, {Module, Function}}}

类型

此验证回调将在任何心跳发送到端口程序之前执行。为了验证成功,它需要返回值ok

回调中的异常将被视为验证失败。

如果系统重新启动,回调将被删除。

clear_callback() -> ok

在心跳前删除验证回调呼叫。

get_callback() -> {ok, {Module, Function}} | none

类型

获取验证回调。如果回调被清除,将被退回none

set_options(Options) -> ok | {error, {bad_options, Options}}

类型

有效的选项set_options是:

check_schedulers

如果启用,则会向每个调度程序发送一个信号以检查其响应性。系统检查发生在任何心跳发送到端口程序之前。如果任何调度程序没有足够响应,那么心脏程序将不会收到其心跳,从而最终终止节点。

如果选项有效,则返回值ok

get_options() -> {ok, Options} | none

类型

返回{ok, Options}其中Options是为心脏启用的当前选项列表。如果回调被清除,none将被退回。

Erlang 20

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

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