У меня есть следующий сценарий:
#!/usr/bin/env escript
%%! -name test_starter@127.0.0.1
main(_) ->
NodeName = test,
Host = '127.0.0.1',
Args = "",
{ok, _Node} = slave:start_link(Host, NodeName, Args),
io:format("Node started successfully!").
При запуске его в Ubuntu 10.04 я получаю это:
$ ./start_slave
Node started successfully!
$
Я хочу установить свой собственный Erlang (последняя версия, отладочные скомпилированные файлы для диализатора и т. Д.), Поскольку в стандартной установке Erlang на Ubuntu отсутствуют некоторые функции. Я положил свои двоичные файлы Erlang внутрь ~/Applications/bin
. Запуск Erlang обычно работает, и запуск подчиненных узлов внутри оболочки Erlang также работает.
Однако, теперь мой скрипт не работает. Примерно через 60 секунд возвращается ошибка:
$ ./start_slave
escript: exception error: no match of right hand side value {error,timeout}
Даже если я изменю первую строку в escript, чтобы использовать мою версию erlang, она все равно не будет работать:
#!/home/user/Applications/bin/escript
Подчиненный узел запускается с вызова erlang:open_port/2
, который, кажется, использует sh
, который, в свою очередь, не читает мой .bashrc
файл, который устанавливает мою пользовательскую переменную среды PATH
. Тайм-аут, по-видимому, возникает, когда slave:start_link/3
ожидает ответа подчиненного узла, чего он никогда не делает.
Как я могу свернуть мою собственную установку Erlang и запустить подчиненные узлы внутри сценариев в Ubuntu 10.4?
Обновление: Я пытался добавить путь к своему настраиваемому Erlang внутри /etc/environment
(где установлен исходный PATH
в Ubuntu), но это ничего не меняет ...
Обновление 2: Принятие единственного предоставленного ответа (хотя это не решило проблему). Версии Ubuntu и Erlang устарели, и это может больше не быть проблемой.