2017-10-27 3 views
0

私はErlangを新しくしました。現在、xmppサービスにejabberdを使用しています。 最近、いくつかの機能の問題については、分散型のerlangeプログラムを書いています。私は2台のマシン間でrpc:callを実行する必要があります。私はrpc:erlシミュレーターで正常に呼び出しを行うことができます。しかし、現在のシステムでは、ejabberdctlを使用してejabberdサービスを開始していました。私はチェックし、ejabberdctlファイルを修正しようとしました。しかし、私は-setcookieをうまく追加できません。ejabberdサービスを実行するためにsetcookieをejabberdctlに追加する方法や、起動時にsetcookieを使用せずに2つのノードを別のマシンに接続する方法はありますか?

ejabberdctlのコードセクションが

ctlexec() 
{ 
    CONN_NAME=$1; shift 
    [email protected] 
    $EXEC_CMD "$ERL \ 
    $NAME ${CONN_NAME} \ 
    -noinput \ 
    -hidden \ 
    -pa $EJABBERD_EBIN_PATH \ 
    $KERNEL_OPTS \ 
    -s ejabberd_ctl -extra $ERLANG_NODE $COMMAND" 
} 

最後の2行によって引き起こされる問題です:私は、このファイルはいくつかのいずれかの前に参照されていると思いますが、私ドン

$KERNEL_OPTS \ 
    -s ejabberd_ctl -extra $ERLANG_NODE $COMMAND" 

どこから来たのか知りません。 誰かがこのerlコマンドに-setcookie abcを追加する方法を知っていますか? ejabberdctlファイルを変更できない場合や悪い場合は、現在のシステムを変更することはできません。 つまり、私はejabberdシステムにsetcookieを追加する機会がありません。 新しいノードを既存のejabberdノード(現在のシステム)にどのように接続できますか?

ejabberdが最初に開始するとします。

答えて

0

あなたの鼻の下に解決策があります。 ctlexec()の仕組みは? $NAME ${CONN_NAME}という名前のノードを実行し、オプション$KERNEL_OPTSを設定し、$EJABBERD_EBIN_PATHを検索パスに挿入し、ejabberd_ctl:start()を追加のパラメータで$ERLANG_NODE $COMMANDに呼び出します。したがって、$KERNEL_OPTSには-setcookie Cookieのパラメータが含まれているか、$HOME/.erlang.cookieにデフォルトのCookieが使用されています。それはまさにあなたが必要とするものです。 -s ejabberd_ctlを自分のモジュールに置き換えて、すでに持っている内容の$KERNEL_OPTS$ERLANG_NODEを使用してください。スクリプト内で$KERNEL_OPTS$ERLANG_NODEに含まれる手がかりを検索してください。

普通の方法で、ejabberd_ctlのようなスクリプトが作成されます。それはかなりシンプルでエレガントです。独自のノードを実行するだけで--hiddenに設定されるため、クラスタ内の他のノードに障害が発生しないようにすることができます。いくつかのランダムなノード名を設定することを忘れないでください。アプリケーションノードに接続し、次にrpc:call/4,5を実行してください。通常、より快適にしたり、余分なパラメータを処理したりするために、ejabberd_ctl.erlのようなモジュールがあります。

+0

最後に、ejabberctlファイルの変更を避けるために、2つのマシン間で.erlang.cookieを共有しています。私はまた、クラスタのセクションでejabberdの文書にこのメソッドを参照してください。 –

関連する問題