1

我们正在运行一个 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]).

问题是我得到一个“节点关闭”错误,即使这些是我用来连接的完全相同的参数erlerl -sname r -remsh ejabberd@xmpp -setcookie `cat ~ejabberd/.erlang.cookie`

4

2 回答 2

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`
于 2012-04-01T17:00:05.443 回答
1

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

于 2015-12-28T09:38:45.883 回答