【问题标题】:erlang server on port 6657?端口 6657 上的 erlang 服务器?
【发布时间】:2017-03-04 05:07:12
【问题描述】:

问题: 我正在尝试按以下方式运行 noshell 命令并在端口 6657 上保持服务器活动,但似乎不起作用。

run_server.sh

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

Erlang 模块函数

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

仅供参考,在 erlang 提示符下我可以执行命令 - server:main(6667) 效果很好。

您能否建议我在该命令中需要更改什么?

谢谢!

【问题讨论】:

    标签: bash erlang erlang-shell erlang-ports


    【解决方案1】:

    假设您的模块名称正确(您在第一个 sn-p 中说 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
    

    【讨论】:

    • erlang.org/doc/man/erl.html erl -pa ebin/ -noshell -run "server:main(6657)" -s init stop 会崩溃 -run Mod [Func [Arg1, Arg2, ...]] (init flag)
    • 糟糕,我在那里打错字了。那应该是-eval,而不是-run。请参阅编辑。
    • 我可以在没有崩溃的情况下执行这个命令erl -pa ebin/ -noshell -eval "server:main(6657)" -s init stop,但是服务器并没有一直运行。如何继续在端口 6656 上运行服务器?谢谢@Dogbert 和@kevin
    • @Dogbert 我用正确的模块名称修改了问题
    • @J4cK 我相信你正在寻找 -detached 而不是 -s init stop: erl -pa ebin/ -noshell -detached -eval "server:main(6657)",但是,除非这只是为了玩,你应该在生产中使用类似 systemd/upstart 的东西以便服务器在崩溃时正确重启。
    猜你喜欢
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2020-08-23
    相关资源
    最近更新 更多