Erlang 心跳

Posted

技术标签:

【中文标题】Erlang 心跳【英文标题】:Erlang heartbeats 【发布时间】:2018-09-20 09:31:50 【问题描述】:

我正在尝试创建一个可以在同一网络上的两台不同机器上运行的应用程序,当其中一个应用程序崩溃时,我想使用 erlang 心跳系统使其重新启动。我该怎么做?

我已经阅读了文档,但还没有弄清楚如何在实践中实现这一点。

谢谢

【问题讨论】:

【参考方案1】:

您是否专门阅读了http://erlang.org/doc/man/heart.html 并尝试按照那里的说明进行操作?特别是,您必须首先将环境变量 HEART_COMMAND 设置为完整的命令行以用于重新启动系统。

为了使这更容易,您可以使用这样的启动脚本:

#!/bin/sh
erl -detached -heart -env HEART_COMMAND "$0 $@" -env HEART_BEAT_TIMEOUT 20 -sname mynode

在某些环境(例如嵌入式系统)中,您可能更喜欢完全重新启动操作系统,并且可以简单地运行以下内容:

#!/bin/sh
erl -detached -heart -env HEART_COMMAND "reboot" -env HEART_BEAT_TIMEOUT 20 -sname mynode

【讨论】:

我尝试使用以下命令打开 erlang(在 ubutnu 中)外壳:“erl -heart -env HEART_BEAT_TIMEOUT 20 -env HEART_COMMAND heart -shutdown”并在 20 后使用 CTRL + Z 退出外壳秒我得到错误:“心脏:2018 年 4 月 11 日星期三 17:23:10:Erlang 已关闭。”什么都没有发生。 文档的那部分是神秘的。 “heart -shutdown”仅适用于 Windows,并且仅用于帮助触发 Windows 机器上的重新启动(它在其他平台上完全没有影响)。在类 Unix 系统上,您可以简单地使用“rebo​​ot”、“sudo reboot”或类似名称。

以上是关于Erlang 心跳的主要内容,如果未能解决你的问题,请参考以下文章

Erlang - C 和 Erlang

C 和 Erlang:Erlang 端口示例

erlang虚拟机代码运行原理

erlang虚拟机代码执行原理

[Erlang_Question35]Erlang18的time

Erlang - 将每个“erlang 进程”映射到新的内核线程