4

我有一个程序可以启动应用程序,然后将(儿童)工人添加到主管。显然,在只做完之后,它就没有什么可做的了,它停止了(退出)。因此,让它不停止 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 做到这一点?

或者我应该使用不同的解决方案来打包和分发我的程序,它实际上更像是一个服务器/守护进程而不是命令行工具?

4

2 回答 2

6

打包此类系统的典型方法是 OTP 版本。为此,您可以使用exrm

如果由于某些原因,您仍然想使用 escript,您可以:timer.sleep(:infinity)在启动所有应用程序和进程后调用。

于 2015-05-06T11:17:21.270 回答
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
于 2019-08-14T19:26:10.643 回答