【问题标题】:Passing command to erl?将命令传递给erl?
【发布时间】:2012-04-15 11:41:40
【问题描述】:

我们正在运行一个 erlang 程序 (ejabberd)。有时,我们需要通过将 erl shell 连接到这个正在运行的 erlang 程序来进行健康检查。

我正在尝试编写所有这些脚本,而不是键入 erl -sname r -remsh .... 然后在 erlang shell 中输入我的命令,我正在寻找直接从我的 bash shell 执行该命令并获取输出的方法。这可能吗?

在Odobenus的回答之后,我写了这个小脚本:

#!/usr/bin/env escript
%%! -sname r -setcookie `cat ~ejabberd/.erlang.cookie`

main([]) -> 
    Res = rpc:call(ejabberd@xmpp,mnesia,info,[]),
    io:format("~p~n",[Res]).

问题是我收到“节点关闭”错误,尽管这些参数与我用来连接 erl:erl -sname r -remsh ejabberd@xmpp -setcookie `cat ~ejabberd/.erlang.cookie` 的参数完全相同

【问题讨论】:

    标签: erlang erl


    【解决方案1】:

    问题出在 -sname 参数中。使用全名 -name node@host 一切都会正常

    【讨论】:

      【解决方案2】:

      你可以为此编写 escript http://www.erlang.org/doc/man/escript.html

      种类(例如 tst.erl)

      #!/usr/bin/env escript
      %%! -sname r 
      
      main([Cookie]) -> 
          erlang:set_cookie(node(),list_to_atom(Cookie)),
          Res = rpc:call(name@somenode,somemodule,somefunction,[]),
          io:format("~p~n",[Res]).
      

      并从 bash 脚本中调用它

      ./tst.erl `cat verythatfile`
      

      【讨论】:

      • 不幸的是,我确实收到了{badrpc,nodedown}。问题是当我与 erl 连接时,我使用 remsh,我似乎无法用 escript 来做。有什么想法吗?
      • nodedown 表示 escript 看不到您的服务器。您是否设置了相同的 cookie?
      • 当,我的 cat ~ejabberd/.erlang.cookie 在 thge %% 行中失败。手动输入它可以解决这个问题......但是最好避免这种情况。有什么线索吗?
      猜你喜欢
      • 2016-01-27
      • 2016-09-14
      • 2017-01-30
      • 1970-01-01
      • 2023-04-05
      • 2019-02-16
      • 2018-06-18
      • 2017-12-15
      • 2012-06-24
      相关资源
      最近更新 更多