私たちが現在多くのErlangインスタンスを展開している人々は、バグがスローされているのを見て、それらを調べたいと思っています...
通常、リモートシェルを使用して実行中のインスタンスに接続し、その方法でErlangコンソールにアクセスしますが、これはrbまたはエラーメッセージでは機能しません...
サーバーをドロップせずに、非接続で起動してシェルを確認せずに、SASLエラーメッセージにリモートアクセスするにはどうすればよいですか?
私たちが現在多くのErlangインスタンスを展開している人々は、バグがスローされているのを見て、それらを調べたいと思っています...
通常、リモートシェルを使用して実行中のインスタンスに接続し、その方法でErlangコンソールにアクセスしますが、これはrbまたはエラーメッセージでは機能しません...
サーバーをドロップせずに、非接続で起動してシェルを確認せずに、SASLエラーメッセージにリモートアクセスするにはどうすればよいですか?
私はR11Bでこれに遭遇し、リモートシェル(http://github.com/archaelus/erms/blob/master/src/erms_rb.erl)上で動作するrbのクローンを作成することになりました。秘訣は、呼び出し元のgroup_leaderを検出し、そこに出力を送信することです。
私はおそらくそれを片付けて、rbへのパッチとして提出する必要があります。
-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.
よろしく、トム
私は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
文字列です。
..。
また、カスタムハンドラコールバックをインストールする方法があることをぼんやりと覚えていますが、残念ながら、今はそれを見つけることができないようです。