Как я могу создать эликсир эликсира, который не останавливает виртуальную машину Erlang после выполнения (например, эликсир --no-halt)

У меня есть программа, которая запускает приложение, а затем добавляет (детей) работников к руководителю. Очевидно, после выполнения только того, что ему больше нечего делать, и он останавливается (выходит). Таким образом, если она не остановится, ВМ позволит работникам работать.

Единственное решение, которое я нашел, это добавить:

IO.gets "Working... To finish hit <Enter>."

в конце...

Я хочу построить escript что после запуска не остановится виртуальная машина Erlang просто так:

elixir --no-halt -S mix run --eval 'MyApp.CLI.m
ain(["some-arg"])'

или же

mix run --no-halt --eval 'MyApp.CLI.m
ain(["some-arg1,some-arg2"])'

Есть ли способ сделать это с помощью сценария?

Или я должен использовать другое решение для упаковки и распространения моей программы, которая на самом деле больше похожа на сервер / демон, чем на инструмент командной строки?

1 ответ

Решение

Типичным подходом к упаковке таких систем является выпуск OTP. Вы можете использовать exrm для этого.

Если по каким-то причинам вы все еще хотите использовать escript, вы можете просто позвонить :timer.sleep(:infinity) после запуска всех приложений и процессов.

ПРИМЕЧАНИЕ: Начиная с Elixir 1.9

Мы можем использовать System.no_halt(true) чтобы сценарий никогда не останавливался.

Вот простой пример скрипта:

defmodule Mix.Tasks.NoHalt do
  use Mix.Task

  def run(_) do
    System.no_halt(true)
    IO.puts("Never die!")
  end
end
Другие вопросы по тегам