尝试使用rabbitmqctl ,出现以下错误:
$ which rabbitmqctl /usr/sbin/rabbitmqctl $ sudo rabbitmqctl status /usr/lib/rabbitmq/bin/rabbitmqctl: line 29: exec: erl: not found
( /usr/sbin/rabbitmqctl最有可能在/usr/lib/rabbitmq/bin/rabbitmqctl中调用/usr/lib/rabbitmq/bin/rabbitmqctl /usr/lib/rabbitmq/bin/${SCRIPT} – 猜测${SCRIPT}计算结果为rabbitmqctl )
但是,当简单地从shell中访问erl时,我会按照预期到达erlang shell
$ which erl /usr/local/bin/erl $ ls -la /usr/local/bin/erl lrwxrwxrwx 1 root root 21 Jul 18 02:03 /usr/local/bin/erl -> ../lib/erlang/bin/erl $ erl Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:16:16] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.9.1 (abort with ^G) 1>
安装信息:
otp_src_R15B01.tar.gz编译的Erlang otp_src_R15B01.tar.gz rabbitmq-server-2.8.4-1.noarch.rpm安装。 默认configuration(无configuration文件)。 path:
$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin
在查看rabbitmqctl的源代码rabbitmqctl ,看起来这只是一个简单的调用erl ,没有涉及魔术:
exec erl \ -pa "${RABBITMQ_HOME}/ebin" \ -noinput \ -hidden \ ${RABBITMQ_CTL_ERL_ARGS} \ -sname rabbitmqctl$$ \ -s rabbit_control \ -nodename $RABBITMQ_NODENAME \ -extra "$@"
似乎无法弄清楚问题究竟是什么…
正如所料,这是一个PATH问题:
$ sudo which erl which: no erl in (/sbin:/bin:/usr/sbin:/usr/bin)
通过为erl创build符号链接来解决这个问题:
sudo ln -s /usr/local/bin/erl /usr/bin/erl
也许可以以某种方式避免/usr/bin的符号链接( /usr/local/...或其他)。