从命令行启动erlang应用程序时出现问题

从命令行启动erlang应用程序时出现问题,erlang,otp,Erlang,Otp,我正在尝试从命令行启动一个应用程序。该应用程序基本上是一个符合OTP的TCP服务器,从shell启动时工作正常。但是,当从命令行启动时,它实际上不会启动 我的所有文件都在一个兼容的文件夹结构中,这意味着\src和binaries\ebin中的源文件。我已在.erlang文件中使用 code:add_patha("./ebin"). 正在调用的函数就在这个模块中 -module(wotsuke_geolocation_lookup_server). -behaviour(application)

我正在尝试从命令行启动一个应用程序。该应用程序基本上是一个符合OTP的TCP服务器,从shell启动时工作正常。但是,当从命令行启动时,它实际上不会启动

我的所有文件都在一个兼容的文件夹结构中,这意味着\src和binaries\ebin中的源文件。我已在.erlang文件中使用

code:add_patha("./ebin").
正在调用的函数就在这个模块中

-module(wotsuke_geolocation_lookup_server).
-behaviour(application).

-export([start/0, start/2, stop/1]).

start() -> 
    event_dbs:start(),
    wotsuke_server_sup:start_link().

start(_Type, _Args) ->
    event_dbs:start(),
    wotsuke_server_sup:start_link().

stop(_State) ->
    ok.
我还(冗余地)添加了一个start/0(由于将来的功能需要参数,我使用start/2),因为从参数开始从来都不起作用。 现在当我跑步时:

erl -run wotsuke_geolocation_lookup_server start [] []
我明白了

这意味着它找不到模块/函数。因此,我使用了冗余启动/0

erl -run wotsuke_geolocation_lookup_server start
并获得:

Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
1> 
基本上什么都没有启动(没有返回进程ID)。我尝试连接到服务器,并在服务器关闭时获得典型答案。我还尝试使用-pa选项强制erl进入ebin文件夹。同上

这是我第一次尝试从命令行运行erlang应用程序(为了将其妖魔化),我对此一无所知

谢谢你的帮助

添加:不确定是否有帮助,我还添加了erlang应用程序代码

{application, wotsuke_geolocation_lookup_server,
   [{description, "Wotsuke Geolocation lookup server"},
    {vsn, "0.1.0"},
    {modules, [tcpserver_otp_backend, ets_methods, data_packing, data_formats, event_timings, logger, event_dbs,
                    obsolete_data_clean_ad, obsolete_data_clean, wotsuke_data_input, wotsuke_logger, wotsuke_server_sup, data_retrieve, wotsuke_data_output, user_event_dbs,
                    event_areas]},
    {registered, [wotsuke_data_input, wotsuke_server_sup, wotsuke_logger, wotsuke_data_output]},
    {applications, [kernel, stdlib, mnesia]},
    {env, []},
    {mod, {bsc, []}}]}.
更新:解决了一个问题。命令的问题

erl -run wotsuke_geolocation_lookup_server start [] []

实际上是由于erl希望在指定模块时启动/0,或者如果也指定了函数,则arity 1。使[]被视为[…],[…]

是的,根据run执行的函数应该是arity 1。您可以定义调用start/2的
init([Application,Type])
,然后使用
erl-run-wotsuke\u geolocation\u lookup\u server init[][]

显然,我的问题是无法通过命令行作为标准函数启动管理器,而只能使用Application:start。因此,我通过使用应用程序本身并在命令行上执行解决了我的问题

erl (options) eval "application:start(...)"

看起来它正在选择一个参数作为
{init termining in do_boot',{undef,[{wotsuke_geology_lookup_server,start,[[“[]”,“[]”,“[]”,[],[],[]},{init,start_it,1,[]},{init start,start_em,1,[]}}
意味着start/1的未定义是
,[]>,实际上是一个参数,算术数必须为1零。但是,我仍然存在这样一个问题:当错误被解决时,服务器实际上并没有启动,而shell却启动了。我真的不明白。
erl (options) eval "application:start(...)"