Phoenix/Elixir从web重新启动系统

Phoenix/Elixir从web重新启动系统,elixir,phoenix-framework,system-shutdown,Elixir,Phoenix Framework,System Shutdown,是否可以通过向web服务器发送请求来重新启动系统?以下是我到目前为止尝试过的内容,但不断收到错误(Plug.Conn.notsenterro)未设置响应,也未从连接发送响应 defmodule App.Web.SystemController do use App.Web, :controller def system(conn, %{"command" => command}) do "sudo shutdown -r now" |> String.to_cha

是否可以通过向web服务器发送请求来重新启动系统?以下是我到目前为止尝试过的内容,但不断收到错误
(Plug.Conn.notsenterro)未设置响应,也未从连接发送响应

defmodule App.Web.SystemController do
   use App.Web, :controller

  def system(conn, %{"command" => command}) do
    "sudo shutdown -r now" |> String.to_char_list |> :os.cmd
   conn
 end
end
我正在RPI上的本地服务器上工作,希望在界面中有一个按钮可以自动重新启动服务器。使用elixir关闭服务器的正确方法是什么

我也在想,我可以编写一个bash脚本,只需调用它,但不确定它是否会对web服务器产生任何负面影响。任何建议,建议,谢谢

从终端获取的错误:

Request: POST /api/v1/system_power/
** (exit) an exception was raised:
    ** (Plug.Conn.NotSentError) a response was neither set nor sent from the   connection
    (plug) lib/plug/adapters/cowboy/handler.ex:42: Plug.Adapters.Cowboy.Handler.maybe_send/2
    (plug) lib/plug/adapters/cowboy/handler.ex:16: Plug.Adapters.Cowboy.Handler.upgrade/4
    (cowboy) /Users/user/app/deps/cowboy/src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4

您是否记录了命令无法运行的任何错误?另外,您需要从中返回Conn,您可以在
:os.cmd
行之后添加
文本(Conn,“done”)
。嘿@Dogbert,我已经发布了我收到的全部错误。我还尝试添加
文本(conn,“done”)
,这消除了控制台中的错误,但命令本身没有执行。您是否收到任何
sudo
相关错误?尝试执行
IO.inspect(:os.cmd('sudo shutdown-r now'))
。我认为
text(conn,“done”)
确实有帮助,问题是我的系统需要sudo密码才能真正关机。从您的命令中,我得到了
'sudo:no tty present,no askpass program\n'
是的,@Dogbert,问题是它要求输入我没有提供的sudo密码。我尝试过其他不需要sudo的命令,现在它可以工作了。谢谢你,伙计!