Mam moduł genserver, który muszę uruchomić jako serwer działający w tle. Podczas rozwoju, użyłem standardowego terminala ERL uruchomić go jakoErlang erl_call powoduje, że moduł gen_server jest zamykany
$erl
Erlang R13B01 (erts-5.7.2) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.2 (abort with ^G)
1> myserver:start_link().
<ok, some_pid>
Wszystko działało dobrze i byłem w stanie połączyć się z serwerem z innymi modułami.
Teraz potrzebuję uruchomić go jako serwer w sposób ciągły i natknąłem się na funkcję erl_call. A więc teraz:
erl_call -d -s -a 'myserver start_link' -sname myserver_node
Ale serwer uruchamia się, ale wyłącza się automatycznie. Włączyłem opcję -d, aby zobaczyć, co się dzieje. Oto, co widzę w pliku śledzenia debugowania:
===== Log started ======
Fri Oct 2 04:42:32 2009
erl_call: sh -c exec erl -noinput -sname myserver_node -s erl_reply reply 174.143.175.70 42457 5882
=ERROR REPORT==== 2-Oct-2009::04:44:05 ===
** Generic server myserver terminating
** Last message in was {'EXIT',<0.59.0>,normal}
** When Server state == {20499,24596,28693,32790,36887,40984,45081}
** Reason for termination ==
** {function_clause,[{myserver,terminate,
[normal,
{20499,24596,28693,32790,36887,40984,45081}]},
{gen_server,terminate,6},
{proc_lib,init_p_do_apply,3}]}
Czy wiesz, co powoduje automatyczne wyłączenie serwera? Ślad nawet mówi, że przyczyna wypowiedzenia była normalna. Ale nie zainicjowałem rozwiązania.