3

私たちが現在多くのErlangインスタンスを展開している人々は、バグがスローされているのを見て、それらを調べたいと思っています...

通常、リモートシェルを使用して実行中のインスタンスに接続し、その方法でErlangコンソールにアクセスしますが、これはrbまたはエラーメッセージでは機能しません...

サーバーをドロップせずに、非接続で起動してシェルを確認せずに、SASLエラーメッセージにリモートアクセスするにはどうすればよいですか?

4

3 に答える 3

4

私はR11Bでこれに遭遇し、リモートシェル(http://github.com/archaelus/erms/blob/master/src/erms_rb.erl)上で動作するrbのクローンを作成することになりました。秘訣は、呼び出し元のgroup_leaderを検出し、そこに出力を送信することです。

私はおそらくそれを片付けて、rbへのパッチとして提出する必要があります。

于 2010-03-01T18:34:40.220 に答える
2

-remsh(${ROOTDIR}/bin/erl -name shell@${NODE_IP} -remsh ${NODE_NAME})を使用してリモートシェルを起動します。そこで、rb_server group_leaderをシェルの現在のgroup_leaderに設定すると、rbはその出力をアクティブなシェルに出力します。

(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エラーロガーにインストールします。これにより、すべてのレポートがファイルに移動しますFileNameFileName文字列です。

..。

また、カスタムハンドラコールバックをインストールする方法があることをぼんやりと覚えていますが、残念ながら、今はそれを見つけることができないようです。

于 2010-03-02T05:23:51.220 に答える