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.
¿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
El punto es que el nodo comienza el tiempo de espera incluso antes de que 'start_link/3 returns'. –
Además, el punto es ejecutar pruebas, así que estoy de acuerdo con que el nodo muera cuando el script muera. :-) –