У меня есть следующий escript:
#!/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 (последняя версия, отладка скомпилированные файлы для dialyzer и т.д.), так как установка запаса Erlang на Ubuntu испытывает недостаток в некоторых функциях. Я вставил свои двоичные файлы Erlang ~/Applications/bin
. Запуск Erlang обычно работает, и стартовые ведомые узлы в оболочке Erlang работы также.
Однако теперь мой escript не работает. Приблизительно после 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 и запустить ведомые узлы внутри escripts на Ubuntu 10.4?
Обновление: я попытался добавить путь к своему пользовательскому Erlang внутри /etc/environment
(где оригинал PATH
в Ubuntu установлен), но это ничего не изменяет...
Обновление 2: Принятие единственного данного ответа (даже при том, что это не решило проблему). Ubuntu и версии Erlang немного стары теперь, и это не могло бы больше быть проблемой.
Возможно ли, что ведомый узел запускается с другой установкой Erlang? В документации по ведомым узлам в разделе "Причины ошибки тайм-аута" я увидел "у узлов Erlang разные cookies", что, как мне кажется, может иметь место в этом случае.
Если это так, то выполнение ps -FC erlang
в ожидании таймаута должно показать вам процессы с разными путями.