我们正在运行一个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`
连接的完全相同的句号:{{1}}
答案 0 :(得分:1)
您可以为此目的编写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`
答案 1 :(得分:0)
问题出在-sname参数中。使用全名-name node @ host,一切正常