Скрипт для нескольких приложений erlang на нескольких компьютерах и некоторые другие вопросы - PullRequest
0 голосов
/ 12 июля 2020

Извините за мои плохие навыки английского sh.

У меня есть 2 приложения erlang, например app1 и app2, и я хочу запускать их на 3 узлах, когда каждый узел имеет свой файл конфигурации. Кроме того, мне нужно, чтобы приложение 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).

Все узлы должны запускаться вместе из-за синхронизации c time (я установил этот параметр на 10000) в файле конфигурации и то же самое для app2. Чтобы убедиться, что моя программа работает так, как я хочу, я делаю это сам, это легко, у меня есть контроль над временем, я открываю терминатор с 3 терминалами, делаю копипасту для команд, и все в порядке.

Мои вопросы: у меня 3 компьютера, мне нужен 1 узел на 1 компьютер. Как написать сценарий для каждого компьютера, который сделает это автоматически? Могу ли я вставить команды erlang в сценарий bash? Как лучше всего это сделать? Как решить проблему с синхронизацией c? Могу ли я установить syn c time на бесконечность?

cp1 code: (то же самое для других, только с изменениями в syn c обязательно)

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

app2.app code:

{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 Ответ

0 голосов
/ 13 июля 2020

У меня 3 компьютера, мне нужен 1 узел на 1 компьютер. Как написать сценарий для каждого компьютера, который будет делать это автоматически?

Я бы рекомендовал использовать инструмент для создания выпуска, например rebar3 , выпуск включает сценарий загрузки который запускает узел с файлами конфигурации. Я также рекомендую активировать флаг -heart в вашем случае или установить выпуск как службу systemd.

Могу ли я вставить команды erlang в сценарий bash ? Какой лучший способ сделать это?

Вы можете использовать escript , чтобы справиться с этим, вы можете проверить этот вопрос для примера того, как это сделать (TL; DR: можно, но запускается новый узел).

Как я могу решить проблему с синхронизацией c? Могу ли я установить время синхронизации c на бесконечность?

Из распределенных приложений , да, вы можете установить время синхронизации c на infinity.

...