簡體   English   中英

如何構建一個Elixir escript,它不會在執行后停止Erlang VM(如elixir --no-halt)

[英]How can I build an Elixir escript that does not halt the Erlang VM after execution (like elixir --no-halt)

我有一個啟動應用程序的程序,然后將(子)工作者添加到主管。 顯然,在做了之后,它就沒有什么可做的了,它就會停止(退出)。 因此,讓它不停止VM將允許工作人員工作。

我提出的唯一解決方案是添加:

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

在末尾...

我想構建一個escript ,在運行后不會像以下那樣停止Erlang VM:

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"])'

有沒有辦法用escript做到這一點?

或者我應該使用不同的解決方案來打包和分發我的程序,實際上更像是服務器/守護程序而不是命令行工具?

包裝此類系統的典型方法是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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM