多个erlang应用程序、多台计算机和一些其他问题的脚本



我有两个Erlang应用程序,例如app1app2。当每个节点都有自己的配置文件时,我想在三个节点上运行它们
此外,我需要在app2之前运行app1
app1必须在每个节点上运行。app2对于所有节点都是相同的程序,但只有一个节点同时运行它;其他节点等待当前节点将失败的情况。

运行示例:

节点1:

erl -sname cp1 config cp1
application:start(app1).
application:start(app2).

节点2:

erl -sname cp2 config cp2
application:start(app1).
application:start(app2).

节点3:

erl -sname cp3 config cp3
application:start(app1).
application:start(app2).

由于配置文件中的同步时间(我将此参数设置为10000(以及app2的同步时间,所有节点都需要一起启动
为了检查我的程序是否按我的意愿工作,我自己做这件事,这很容易:我可以控制时间,我打开一个有3个终端的终止器,复制粘贴到命令,一切都好。

我的问题是:
我有3台电脑。我需要一台计算机的一个节点。如何为每台自动运行的计算机编写脚本
我可以将Erlang命令插入bash脚本吗?最好的方法是什么?如何处理同步问题?我可以将同步时间设置为无穷大吗?

cp1代码:(其他代码相同,只是必须更改同步(

[{kernel,
[{distributed, [{app2, 2000, [{cp1@dev1, cp2@dev1, cp3@dev1}]}
]},
{sync_nodes_mandatory, [cp2@dev1, cp3@dev1]},
{sync_nodes_timeout, 10000}
]
}
].

app2.应用程序代码:

{application, app2,
[{description, "An OTP application"},
{vsn, "0.1.0"},
{registered, []},
{mod, {app2_app, []}},
{applications,
[kernel,
stdlib,
app1
]},
{env,[]},
{modules, []},
{licenses, ["Apache 2.0"]},
{links, []}
]}.

我有3台计算机,1台计算机需要1个节点。如何编写为每台计算机自动执行的脚本?

我建议使用一个工具来生成一个版本,如rebar3,该版本包括一个启动脚本,该脚本使用配置文件启动节点
我还建议在您的情况下激活-heart标志,或者将该版本作为systemd服务安装。

我可以在bash脚本中插入erlang命令吗?最好的方法是什么这

您可以使用escrept来处理此问题,您可以检查此问题以获取如何做到这一点的示例(TL;DR:您可以,但它会启动一个新节点(。

如何处理同步问题?我可以将同步时间设置为无穷

对于分布式应用程序,可以将同步时间设置为infinity

最新更新