web-dev-qa-db-ja.com

RabbitMQ:erlが見つかりません

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/${SCRIPT}-${SCRIPT}rabbitmqctlと評価されます)

ただし、シェルからerlにアクセスするだけで、期待どおりにerlangシェルに到達します。

$ 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>

セットアップ情報:

  • CentOS 6.2
  • otp_src_R15B01.tar.gzからコンパイルされたErlangR15B01
  • rabbitmq-server-2.8.4-1.noarch.rpmからインストールされたRabbitMQ2.8.4。デフォルト設定(confファイルなし)。

道:

$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin

rabbitmqctlのソースを調べたところ、これはerlの単純な呼び出しであり、魔法は関係していないようです。

exec erl \
    -pa "${RABBITMQ_HOME}/ebin" \
    -noinput \
    -hidden \
    ${RABBITMQ_CTL_ERL_ARGS} \
    -sname rabbitmqctl$$ \
    -s rabbit_control \
    -nodename $RABBITMQ_NODENAME \
    -extra "$@"

問題が実際に何であるかを理解できないようです...

1
scooz

予想通り、それはPATHの問題でした。

$ Sudo which erl
which: no erl in (/sbin:/bin:/usr/sbin:/usr/bin)

erlのシンボリックリンクを作成することで、これを解決しました。

Sudo ln -s /usr/local/bin/erl /usr/bin/erl

/usr/binへのシンボリックリンクはどういうわけか回避できるかもしれません(/usr/local/...か何か)。

5
scooz