ejabberdctl转储错误“太短的cookie字符串”

时间:2012-05-18 15:32:57

标签: erlang ejabberd

尝试使用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文件并重新启动,但这没有帮助。

5 个答案:

答案 0 :(得分:0)

检查cookie文件是否包含某些内容,如果该文件为空,则会收到此错误。

答案 1 :(得分:0)

请在此处发布您的Cookie文件内容。 可能cookie的长度实在太短了。

或者您可以使用erlang的源代码来查找“太短的cookie字符串”以查看问题所在。

2012/5/22,添加了以下内容。

我已经对我的erlang源代码(R15B)进行了操作,并且只在文件“auth.erl”中找到了字符串“Too short cookie string”。相关代码如下。从源代码中,您文件的cookie文件为空,因此会出现错误。

我认为有两种方法可以检查它。

  1. 您可以在erlang shell中使用erlang:get_cookie() -> Cookie | nocookie来检查这一点。
  2. 您可以通过添加用于编写详细cookie目录的调试表达式来修改以下read_cookie文件,并将其编译为* .beam文件并替换旧文件。
  3. 也许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的权限。就我而言,这些问题一旦解决了它的工作原因。