heart
heart
模块
heart
模块摘要
Erlang运行时系统的心跳监视。
描述
这些模块包含heart
进程的接口。heart
定期发送心跳到外部端口程序,该程序也被命名heart
。heart
端口程序的目的是检查它所监控的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
将被退回。