2010-05-27 9 views
8

Mam następujący escript:Zaczynając węzeł podrzędny Erlang w escript nie przy użyciu niestandardowego Erlang w 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!"). 

Uruchamiając go na Ubuntu 10.04 uzyskać to:

$ ./start_slave 
Node started successfully! 
$ 

chcę zainstalować mój własny Erlang (najnowsza wersja, debug skompilowane pliki dla dializera itp.), ponieważ w magazynie Erlanga na Ubuntu brakuje niektórych funkcji. Umieściłem pliki binarne Erlang wewnątrz ~/Applications/bin. Uruchamianie Erlanga zwykle działa, a uruchamianie węzłów podrzędnych w powłoce Erlang działa również.

Jednak teraz mój eskryt nie działa. Po około 60 sekundach zwraca błąd:

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

Nawet gdybym zmienić pierwszy wiersz do escript aby wykorzystać moją wersję erlang, to nadal nie działa:

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

Węzeł podrzędny jest uruchomiony z wywołaniem erlang:open_port/2, które wydaje się używać sh, który z kolei nie czyta mojego pliku .bashrc, który ustawia moją niestandardową zmienną środowiskową PATH. Limit czasu wydaje się występować, gdy slave:start_link/3 czeka na odpowiedź węzła podrzędnego, co nigdy nie ma miejsca.

Jak mogę przetasować własną instalację Erlanga i uruchomić węzły podrzędne w escriptach w systemie Ubuntu 10.4?

Aktualizacja: Próbowałem dodać ścieżkę do mojego zwyczaju Erlang wewnątrz /etc/environment (gdzie oryginalna PATH w Ubuntu jest ustawione), ale to niczego nie zmienia ...

Aktualizacja 2: Przyjmowanie jedynej udzielonej odpowiedzi (nawet jeśli nie rozwiązało problemu). Wersje Ubuntu i Erlang są nieco stare i może to już nie być problem.

+0

Czy na pewno chcesz użyć wyrażenia "start_link" zamiast "start"? W ten sposób twoi niewolnicy automatycznie kończą pracę, gdy twój skrypt się zakończy (który pojawia się po wywołaniu głównego). Zobacz dokumentację dla 'start_link'. – ZeissS

+0

Chodzi o to, że węzeł zaczyna wygasać, nawet zanim 'start_link/3 zwróci '. –

+0

Chodzi o to, aby uruchomić testy, więc nic mi nie jest, gdy węzeł umiera, gdy skrypt umiera. :-) –

Odpowiedz

1

Czy to możliwe, że węzeł podrzędny jest uruchamiany z inną instalacją Erlanga? Podane przyczyny powodują błąd przekroczenia limitu czasu w the documentation on slave nodes Widziałem "węzły Erlanga mają różne pliki cookie", co może, jak sądzę, wystąpić w tym przypadku.

W takim przypadku uruchomienie ps -FC erlang podczas oczekiwania na przekroczenie limitu czasu powinno pokazać procesy o różnych ścieżkach.

+0

To się nie uruchamia, lub zawiesza się natychmiast po uruchomieniu. Nie widzę procesu dla węzła podrzędnego. –

+0

W każdym razie powinien używać tego samego pliku cookie, ponieważ mam go ustawiony w '~/.erlang.cookie' –

+0

Zaakceptowanie tej odpowiedzi, ponieważ nie podano innej odpowiedzi. Nigdy jednak nie udało się rozwiązać problemu. :-( –