2010-05-27 7 views
8

Tengo el siguiente Escript:A partir de un nodo esclavo Erlang en Escript falla cuando se utiliza la costumbre de Erlang en Ubuntu 10.4

#!/usr/bin/env escript 
%%! -name [email protected] 

main(_) -> 
    NodeName = test, 
    Host = '127.0.0.1', 
    Args = "", 

    {ok, _Node} = slave:start_link(Host, NodeName, Args), 
    io:format("Node started successfully!"). 

cuando se ejecuta en Ubuntu 10.04 me sale esto:

$ ./start_slave 
Node started successfully! 
$ 

quiero para instalar mi propio Erlang (última versión, archivos compilados de depuración para dializador, etc.) ya que la instalación de stock de Erlang en Ubuntu carece de algunas características. Puse mis binarios Erlang dentro de ~/Applications/bin. El inicio de Erlang normalmente funciona, y el inicio de nodos esclavos dentro de un shell de Erlang también funciona.

Sin embargo, ahora mi escript no funciona. Después de unos 60 segundos devuelve un error:

$ ./start_slave         
escript: exception error: no match of right hand side value {error,timeout} 

Incluso si cambio de la primera línea a la Escript usar mi versión de Erlang, todavía no funciona:

#!/home/user/Applications/bin/escript 

Se inicia el nodo esclavo con una llamada al erlang:open_port/2 que parece estar usando sh que a su vez no lee mi archivo .bashrc que establece mi variable de entorno personalizada PATH. El tiempo de espera parece producirse cuando slave:start_link/3 espera a que responda el nodo esclavo, lo que nunca ocurre.

¿Cómo puedo hacer rodar mi propia instalación de Erlang e iniciar los nodos esclavos dentro de las secuencias en Ubuntu 10.4?

Actualización: He intentado añadir la ruta a mi costumbre de Erlang en el interior /etc/environment (donde el original PATH en Ubuntu esta determinado), pero esto no cambia nada ...

Actualización 2: Aceptar la única respuesta dada (aunque no resolvió el problema). Las versiones de Ubuntu y Erlang son un poco viejas ahora y esto podría no ser un problema más.

+0

¿Estás seguro de que deseas utilizar 'start_link' en lugar de' start'? De esta forma, sus esclavos se cierran automáticamente cuando su secuencia de comandos termina por sí misma (lo que significa que, después de haber llamado a main). Ver los documentos para 'start_link' para esto. – ZeissS

+0

El punto es que el nodo comienza el tiempo de espera incluso antes de que 'start_link/3 returns'. –

+0

Además, el punto es ejecutar pruebas, así que estoy de acuerdo con que el nodo muera cuando el script muera. :-) –

Respuesta

1

¿Es posible que el nodo esclavo se esté ejecutando con la otra instalación de Erlang? Enumerado por razones de error de tiempo de espera en the documentation on slave nodes, vi "los nodos de Erlang tienen cookies diferentes" que, en mi opinión, pueden ocurrir en ese caso.

Si este fuera el caso, al ejecutar ps -FC erlang mientras espera el tiempo de espera, debe mostrar los procesos con diferentes rutas de acceso.

+0

En realidad, no se inicia o se bloquea inmediatamente después de comenzar. No puedo ver un proceso para el nodo esclavo. –

+0

En cualquier caso, debería usar la misma cookie ya que la tengo configurada en '~/.erlang.cookie' –

+0

Aceptando esta respuesta ya que no se ha dado ninguna otra respuesta. Sin embargo, nunca descubrimos cómo resolver el problema. :-( –

Cuestiones relacionadas