多个erlang应用程序多台计算机和其他一些问题的脚本
Posted
技术标签:
【中文标题】多个erlang应用程序多台计算机和其他一些问题的脚本【英文标题】:Script for multiple erlang applications multiple computers and some other questions 【发布时间】:2020-11-01 16:35:46 【问题描述】:我有两个 Erlang 应用程序,例如 app1
和 app2
。当每个节点都有自己的配置文件时,我想在三个节点上运行它们。
另外,我需要在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.app 代码:
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, []
].
【问题讨论】:
【参考方案1】:我有 3 台计算机,1 台计算机需要 1 个节点。如何写一个 自动执行它的每台计算机的脚本?
我建议使用工具生成版本,例如rebar3,该版本包含一个启动脚本,该脚本使用配置文件启动节点。
我还建议在您的情况下激活-heart flag,或者将版本安装为systemd
服务。
我可以在 bash 脚本中插入 erlang 命令吗?最好的方法是什么 这个?
您可以使用escript 来处理此问题,您可以查看this question 以获取有关如何执行此操作的示例(TL;DR:您可以,但它会启动一个新节点)。
如何处理同步问题?我可以将同步时间设置为 无穷大?
来自distributed applications,是的,您可以将同步时间设置为infinity
。
【讨论】:
以上是关于多个erlang应用程序多台计算机和其他一些问题的脚本的主要内容,如果未能解决你的问题,请参考以下文章