在运行时检测故障?

时间:2012-03-11 13:13:09

标签: erlang

1)有没有办法从另一个节点自动检测节点何时出现故障?

2)有没有办法自动重新启动刚刚崩溃的节点?

关于我的第二个问题,我已经google了,我看不到在代码/运行时创建节点的任何提及。

我知道你可以用进程来做到这一点 - 在运行时创建进程是微不足道的,如果你想知道它们何时崩溃你可以从主管等创建它们 - 但是我找不到任何与节点检测/创建有关的东西。

对于希望设计较小版本的Amazon EDS的客户需要此功能,但我无法想象亚马逊会在节点发生故障时手动重启节点!

1 个答案:

答案 0 :(得分:3)

您可以使用net_kernel:monitor_nodes(true, [{node_type, visible}])来监控erlang应用程序内的所有可见节点。来自man page

  

调用进程订阅或取消订阅节点状态更改   消息。节点消息被传递到所有订阅进程   连接新节点时,以及何时传递nodedown消息   节点已断开连接。

我没有看到任何直接的方法(来自您的进程内部接收nodedown消息),您可以使用该方法在远程计算机上启动节点。您可能需要编写一个小模块,自动为您执行此操作。