例如,我有两个 Erlang 应用程序app1
和app2
. 当每个节点都有自己的配置文件时,我想在三个节点上运行它们。
另外,我需要app1
在app2
.
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, []}
]}.