Как я могу создать эликсир эликсира, который не останавливает виртуальную машину 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