我有一个启动应用程序的程序,然后将(孩子)工作人员添加到主管。显然,在做了之后,它就没有什么可做的了,它就会停止(退出)。因此,让它不停止虚拟机将允许工人工作。
我提出的唯一解决方案是添加:
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做到这一点?
或者我应该使用不同的解决方案打包和分发我的程序,实际上更像是服务器/守护程序而不是命令行工具?
答案 0 :(得分:6)
打包此类系统的典型方法是OTP版本。您可以使用exrm。
如果由于某些原因,您仍然想使用escript,则可以在启动所有应用程序和进程后调用:timer.sleep(:infinity)
。
答案 1 :(得分:1)
注意:从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