3

伙计们,我们现在正在部署很多 Erlang 实例,我们看到错误被抛出并想检查它们......

通常我们使用远程 shell 连接到正在运行的实例并通过这种方式访问​​ Erlang 控制台,但这不适用于 rb 或错误消息......

如何远程访问我的 SASL 错误消息而不删除服务器、以非分离方式启动它并查看 shell?

4

3 回答 3

4

我在 R11B 中遇到了这个问题,最终创建了一个 rb 的克隆,它可以在远程 shell ( http://github.com/archaelus/erms/blob/master/src/erms_rb.erl ) 上运行。诀窍是发现调用者的 group_leader,然后将输出发送到那里

我可能应该整理一下并将其作为补丁提交给 rb。

于 2010-03-01T18:34:40.220 回答
2

${ROOTDIR}/bin/erl -name shell@${NODE_IP} -remsh ${NODE_NAME}我通过 -remsh ( )启动我的远程 shell 。在那里,我将 rb_server group_leader 设置为 shell 的当前 group_leader,然后 rb 将其输出打印到活动 shell:

(cacherl@192.168.2.31)1> rb:start().
{ok,<0.213.0>}
(cacherl@192.168.2.31)2> group_leader(group_leader(),erlang:whereis(rb_server)).
true
(cacherl@192.168.2.31)3> rb:show(1).

PROGRESS REPORT  <0.77.0>                                   2011-01-28 17:49:23
===============================================================================
supervisor                                                     {local,sasl_sup}
started
         [{pid,<4543.96.0>},
         {name,rb_server},
         {mfargs,{rb,start_link,[[]]}},
         {restart_type,temporary},
         {shutdown,brutal_kill},
         {child_type,worker}]

ok
(cacherl@192.168.2.31)4> 

编辑:为方便起见,将其封装在一个函数中:

%% @doc Start the report browser and reset its group-leader. 
%% For use in a remote shell
start_remote_rb() ->
    {ok, Pid} = rb:start(),
    true = erlang:group_leader(erlang:group_leader(), Pid),
    ok.

问候,汤姆

于 2011-01-28T16:55:09.530 回答
1

我没有用过rb,所以我不太了解它,但也许这对你有帮助:

您可以将 SASL 错误报告处理程序设置为写入磁盘,请参阅http://www.erlang.org/doc/man/sasl_app.html

sasl_error_logger = Value <optional>

Value是其中之一:

...

{file,FileName}

安装sasl_report_file_h在错误记录器中。这使得所有报告都转到文件FileName中。FileName是一个字符串。

...

我还依稀记得有一种方法可以安装自定义处理程序回调,但不幸的是,我现在似乎找不到它。

于 2010-03-02T05:23:51.220 回答