2016-10-21 3 views
0

Проблема: Я пытаюсь запустить команду noshell следующим образом и поддерживать сервер на порту 6657, но, похоже, это не работает.сервер erlang на порту 6657?

run_server.sh

erl -make 
erl -pa ebin/ -noshell -s server main 6657 -s init stop 

Erlang Функциональный модуль

main(Port) -> 
    controller:start(), 

FYI, на Erlang строке можно выполнить команду - server:main(6667) работает отлично.

Не могли бы вы предложить мне, что мне нужно изменить в этой команде?

Спасибо!

ответ

1

Предполагая, что вы имеете право имя модуля (вы говорите server в первом фрагменте и chat_server позже), то проблема, скорее всего, является то, что -s module function arg1 [...] передает аргументы в виде списка атомов, в то время как ваш код требует одно целое (как вы сказал server:main(6657) работ). Вы можете использовать -eval вместо -s:

erl -pa ebin/ -noshell -eval "server:main(6657)" -s init stop 
$ cat a.erl 
-module(a). 
-compile(export_all). 

main(Port) -> 
    io:format("~p~n", [Port]). 
$ erlc a.erl 
$ erl -noshell -pa . -s a main 6657 -s init stop 
['6657'] 
$ erl -noshell -pa . -eval 'a:main(6657)' -s init stop 
6657 
+1

http://erlang.org/doc/man/erl.html 'Эрл -pa Эбин/-noshell -run«сервера: основные (6657) «-s init stop' сбой ** - запустить Mod [Func [Arg1, Arg2, ...]] (флаг инициализации) ** – kevin

+1

Ой, я сделал опечатку там. Это должно быть '-eval', а не' -run'. См. Править. – Dogbert

+0

Я могу выполнить эту команду «erl -pa ebin/-noshell -eval» server: main (6657) «-s init stop'''without crash, но сервер не работает все время. Как я могу продолжать работать на сервере на порту 6656? Спасибо @Dogbert и @kevin – J4cK

Смежные вопросы