尝试使用Erlang R14A在Ejabberd 2.1.5-3上运行此命令时
ejabberdctl dump /tmp/ejabberd1.text
从我收到的ejabberd转储注册用户
{error_logger,{{2012,5,17},{17,9,48}},"Too short cookie string",[]}
{error_logger,{{2012,5,17},{17,9,48}},crash_report,[[{initial_call,{auth,init,['Argument__1']}},{pid,<0.19.0>},{registered_name,[]},{error_info,{exit,{"Too short cookie string",[{auth,init_cookie,0},{auth,init,1},{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]},[{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}},{ancestors,[net_sup,kernel_sup,<0.9.0>]},{messages,[]},{links,[<0.17.0>]},{dictionary,[]},{trap_exit,true},{status,running},{heap_size,987},{stack_size,24},{reductions,871}],[]]}
{error_logger,{{2012,5,17},{17,9,48}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{"Too short cookie string",[{auth,init_cookie,0},{auth,init,1},{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}},{offender,[{pid,undefined},{name,auth},{mfargs,{auth,start_link,[]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]}
{error_logger,{{2012,5,17},{17,9,48}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,shutdown},{offender,[{pid,undefined},{name,net_sup},{mfargs,{erl_distribution,start_link,[]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]}]}
{error_logger,{{2012,5,17},{17,9,48}},std_info,[{application,kernel},{exited,{shutdown,{kernel,start,[normal,[]]}}},{type,permanent}]}
{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}}"}
我尝试删除Cookie文件并重新启动,但这没有帮助。
答案 0 :(得分:0)
检查cookie文件是否包含某些内容,如果该文件为空,则会收到此错误。
答案 1 :(得分:0)
请在此处发布您的Cookie文件内容。 可能cookie的长度实在太短了。
或者您可以使用erlang
的源代码来查找“太短的cookie字符串”以查看问题所在。
我已经对我的erlang源代码(R15B)进行了操作,并且只在文件“auth.erl”中找到了字符串“Too short cookie string”。相关代码如下。从源代码中,您文件的cookie文件为空,因此会出现错误。
我认为有两种方法可以检查它。
erlang:get_cookie() -> Cookie | nocookie
来检查这一点。也许Ejabberd使用了另一个操作系统的用户并使用了另一个主目录的erlang的cookie文件,其他cookie文件内容为空。我之前没有使用Ejabberd,但在2个月前的rabbitmq中遇到过类似的问题。
check_cookie([Letter|Rest], Result) when $\s =< Letter, Letter =< $~ ->
check_cookie(Rest, [Letter|Result]);
check_cookie([X|Rest], Result) ->
check_cookie1([X|Rest], Result);
check_cookie([], Result) ->
check_cookie1([], Result).
check_cookie1([$\n|Rest], Result) ->
check_cookie1(Rest, Result);
check_cookie1([$\r|Rest], Result) ->
check_cookie1(Rest, Result);
check_cookie1([$\s|Rest], Result) ->
check_cookie1(Rest, Result);
check_cookie1([_|_], _Result) ->
{error, "Bad characters in cookie"};
check_cookie1([], []) ->
{error, "Too short cookie string"};
check_cookie1([], Result) ->
{ok, lists:reverse(Result)}.
read_cookie(Name, Size) ->
case file:open(Name, [raw, read]) of
{ok, File} ->
case file:read(File, Size) of
{ok, List} ->
file:close(File),
check_cookie(List, []);
{error, Reason} ->
make_error(Name, Reason)
end;
{error, Reason} ->
make_error(Name, Reason)
end.
答案 2 :(得分:0)
问题最终成为Erlang的版本,而Ejabberd的版本不兼容。一旦我纠正了Erlang版本,问题就消失了。这里的课程是确保您为ejabberd版本运行推荐的erlang版本。
答案 3 :(得分:0)
对我来说问题是文件:/var/lib/rabbitmq/.erlang.cookie
超过1行:
LOBGMGERILECQBFOFTLL
#DGBDSDFTGLECQAFDCDR
删除带有备注的行后,我可以启动服务
cat /var/lib/rabbitmq/.erlang.cookie
LOBGMGERILECQBFOFTLL
答案 4 :(得分:0)
Cookie字符串必须包含一些最小长度内容以及400
的权限。就我而言,这些问题一旦解决了它的工作原因。