繁体   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