Erlangは、slave
別のマシンのマスターノードに報告して調整されるさまざまなマシンのスレーブノードを生成するアプリケーションのモジュールで使用します。スレーブノードはマシンのポートを開いており、いくつかの外部プログラムを実行しています(基本的に、erlangスレーブノード(私たちはそれらをワーカーと呼びます)は外部プログラムの単なるラッパーです)。
しかし、私たちはいくつかの予期しない問題に遭遇しましたが、それに対して良い解決策は見つかりませんでした。
コード配布。現在、Makefileはコンパイルされたerlangコード(フォルダー)をワーカーノードを実行しているマシンにrsyncし、ワーカーノードの起動時に引数を
ebin
介してロードします。-pa
実行時にErlangを介してコードを自動的に配布する方法は本当にあるはずですが、その方法はわかりません。ロギング。スレーブモジュールのドキュメントには、「スレーブで生成されたすべてのTTY出力がマスターノードに送り返される」と記載されています。ただし、
lager
スレーブ(ワーカー)ノードで(芭蕉ロガー)を実行すると、その出力はマスターノードのttyにリダイレクトされません(マスターノードからのログ出力のみがあります)。現在、マスターノードで実行されているプロセスがあり、スレーブノードから取得したメッセージを(ラガーを介して)ログに記録します。したがって、スレーブノードに何かを記録するために、マスターノードにメッセージを送信します。
次のようにワーカーノードを起動しています。
slave:start(IP, NodeName, NodeArgs)
どこにNodeArgs
ありますか
-setcookie thecookie -pa /home/dau/mapro/deps/nicedecimal/ebin/ /home/dau/mapro/deps/meck/ebin/ /home/dau/mapro/deps/lager/ebin/ /home/dau/mapro/deps/jsx/ebin/ /home/dau/mapro/apps/worker/ebin/ /home/dau/mapro/ebin/ -s worker_app
ここで、指定されたすべてのパスは、ワーカーノードを実行しているマシン上の絶対パスです。