我真的在和 Elixir 的主管们苦苦挣扎,想知道如何给他们命名以便我可以使用它们。基本上,我只是想启动一个Task
我可以向其发送消息的监督。
所以我有以下内容:
defmodule Run.Command do
def start_link do
Task.start_link(fn ->
receive do
{:run, cmd} -> System.cmd(cmd, [])
end
end)
end
end
项目入口点为:
defmodule Run do
use Application
# See http://elixir-lang.org/docs/stable/elixir/Application.html
# for more information on OTP Applications
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
# Define workers and child supervisors to be supervised
worker(Run.Command, [])
]
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
# for other strategies and supported options
opts = [strategy: :one_for_one, name: Run.Command]
Supervisor.start_link(children, opts)
end
end
在这一点上,我什至没有信心我正在使用正确的东西(Task
特别是)。基本上,我想要的只是在应用程序启动时生成一个进程或任务或 GenServer 或任何正确的东西,我可以向其发送消息,这些消息本质上会执行System.cmd(cmd, opts)
. 我希望这个任务或过程受到监督。当我向它发送一条{:run, cmd, opts}
消息时,例如{:run, "mv", ["/file/to/move", "/move/to/here"]}
我希望它生成一个新任务或进程来执行该命令。对于我的使用,我什至不需要从任务中取回响应,我只需要它执行即可。任何关于去哪里的指导都会有所帮助。我已经通读了入门指南,但老实说,它让我更加困惑,因为当我尝试做已经完成的事情时,它永远不会像在应用程序中那样。
谢谢你的耐心。