2011-02-04 9 views
5

私はマシンごとに1つのノードを持つ分散erlangシステムを実行しています。シェルコマンドからローカルのerlangノードに通知する最も簡単な方法

DNSは使用できないため、すべて同じ名前の-sname paramで開始します。

erl -sname foo ... 

オペレーティング・システム・デーモンは、シェル(/bin/sh)を実行する機能を有している(USBスティックがシステムにpugged時)特定のイベントが発生したときに指令します。

このシェルコマンドを使用して、このマシン上のローカルのerlangノードで関数を呼び出す簡単な方法を探しています(USBスティックが検出されてマウントされた後でさらに処理を行う)。

私はシェルからerl -sname barを呼び出すことを考えて、これが移動するための方法です

[_,Host] = string:tokens(atom_to_list(node()), "@"), 
The_node = list_to_atom("[email protected]" ++ Host), 
spawn(The_node, My_fun), 

のように見えるいくつかのコードを実行したのか?または、まったく新しいerlangノードの過剰使用を開始しています(ただし、しばしばやっていません)

または、gen_tcpによってオープンされたソケットに接続するか、名前付きパイプを読み取る方が良いでしょうか。

その他の提案はありますか?

これはUnixシステムで実行されています。

+0

+1 erlangとそれを巧みに使います。 – gahooa

答えて

9

あなたが使用したいのは、実際にはerl_callです。これは、現在配布されているノードに連絡して任意のコードを実行できるアプリケーションです。

erl_callは、分散Erlangノードを開始および/または通信することを可能にします。これは、サンプルアプリケーションとしてerl_interfaceライブラリに基づいて構築されています。その目的はUnixシェルスクリプトを使用して、分散Erlangノードと対話することです。

コマンド、エスケープ、あるいは評価するだけのコードを与えることができます。 documentationに詳細と実際の例があります。

+0

素晴らしい、まさに私が探していたもの!あなたは私の一日を作った、ありがとう! –

+0

ああ、私はあまりにも遅く4時間来た!署名:海賊。 –

関連する問題