Erlang: starting slave node

2019-06-21 05:26发布

I'm trying to start erlang slave node on cluster and I receive "bash: erl: command not found" message. Though I have alias for erl. Here is what I actually do:

[user@n001 ~]$ erl -rsh ssh -sname n001    
Eshell V5.7.5  (abort with ^G)
    (n001@n001)1> slave:start_link("user@n002", n002, "-rsh ssh").
    bash: erl: command not found
                                {error,timeout}
    (n001@n001)2>

Maybe, there is something wrong? Thanks.

UPDATE: I've added erlang bin dir to my $PATH variable; I've set $ERLANG_ROOT_DIR variable; created symlink in ~/ to erl - but nothing have changed... Btw, I have installed erlang in ~/bin/erlang dir...

5条回答
唯我独甜
2楼-- · 2019-06-21 06:10

The trouble was in bash: Actually erlang connects to node via ssh, invoking default sh in non-interactive mode. But when bash is started in non-interactive mode, it doesn't read .bashrc where my path variables and aliases are stored. So I switched to zsh and all is ok now! ;)

查看更多
放我归山
3楼-- · 2019-06-21 06:15

my guess is erlang cookie.

can you ping n002 ? if yes, then do the two nodes have the same cookie ?

for example you can try: erl -sname abc -rsh ssh -setcookie secretcookie

erl> slave:start(n002, name, "-setcookie secretcookie"). %% so these two nodes share a cookie

查看更多
等我变得足够好
4楼-- · 2019-06-21 06:25

Just use

>ssh user@n002 erl

to check if erl is ok on n002.

查看更多
小情绪 Triste *
5楼-- · 2019-06-21 06:26

I believe that the alias won't be honored

erl needs to actually be in your path

Also, I believe that your .bashrc doesn't execute either. So you may have to symlink "erl" to /usr/bin or /usr/local/bin

查看更多
ゆ 、 Hurt°
6楼-- · 2019-06-21 06:28

You seem to be using a wrong format for the Host field of start_link/3;

It should be an atom representing the host where the node Name (second parameter, also an atom) should be started, resulting in node Name@Host.

So in your case that would be

slave:start_link('n002', 'n002', "-rsh ssh").
查看更多
登录 后发表回答