2011-02-04 11 views
5

Estoy ejecutando un sistema de erlang distribuido con un nodo por máquina.Forma más sencilla de informar un nodo de erlang local desde un comando de shell

Como DNS no está disponible, todos los inicio con el mismo parámetro -sname, por ejemplo,

erl -sname foo ... 

Un demonio-sistema operativo tiene la función de ejecutar shell (/bin/sh) comandos cuando se produce un cierto evento (cuando un dispositivo USB está pugged en el sistema).

Estoy buscando una forma simple de llamar a una función en el nodo local de erlang en esta máquina con este comando de shell (tomando más medidas después de que se haya detectado y montado el dispositivo USB).

estaba pensando en llamar erl -sname bar de la concha y ejecutar un código que se parece a

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

Es este el camino a seguir? O está comenzando una nueva omisión de nodos de erlang (no lo hará con frecuencia)

¿O es mejor hablar un socket abierto por gen_tcp, o leer una tubería con nombre.

¿O alguna otra sugerencia?

BTW esto se ejecuta en un sistema Unix.

+0

+1 para erlang y un uso inteligente de él. – gahooa

Respuesta

9

Lo que quiere utilizar es en realidad erl_call, una aplicación que le permite ponerse en contacto con nodos actualmente distribuidos y ejecutar código arbitrario.

erl_call hace posible iniciar y/o comunicarse con un nodo Erlang distribuido. Se basa en la biblioteca erl_interface como una aplicación de ejemplo. Su propósito es utilizar un script de shell Unix para interactuar con un nodo Erlang distribuido.

Puede darle comandos, un escript o simplemente código para evaluar y lo hará. Tiene más detalles y un ejemplo real en su documentation.

+0

Genial, ¡exactamente lo que estaba buscando! Hiciste mi día, ¡Gracias! –

+0

¡Ack, llegué 4 horas tarde! Firmado: El Pirata. –

Cuestiones relacionadas