Ejabberd iex live выдает ошибку «плохое значение K: \»

Я установил ejabberd правильно (я настраиваю его с помощью --enabled-all) без каких-либо ошибок. Но когда я хочу запустить его в режиме эликсира, я получаю эту ошибку:

# ejabberdctl iexlive
bad "K" value: \
Usage: beam.smp [flags] [ -- [init_args] ]
The flags are:

-a size        suggested stack size in kilo words for threads
               in the async-thread pool, valid range is [16-8192]
-A number      set number of threads in async thread pool,
               valid range is [0-1024]
-B[c|d|i]      c to have Ctrl-c interrupt the Erlang shell,
               d (or no extra option) to disable the break
               handler, i to ignore break signals
-c bool        enable or disable time correction
-C mode        set time warp mode; valid modes are:
               no_time_warp|single_time_warp|multi_time_warp
-d             don't write a crash dump for internally detected errors
               (halt(String) will still produce a crash dump)
-fn[u|a|l]     Control how filenames are interpreted
-hms size      set minimum heap size in words (default 233)
-hmbs size     set minimum binary virtual heap size in words (default 32768)
-hpds size     initial process dictionary size (default 10)
-K boolean     enable or disable kernel poll
-n[s|a|d]      Control behavior of signals to ports
               Note that this flag is deprecated!
-M<X> <Y>      memory allocator switches,
               see the erts_alloc(3) documentation for more info.
-pc <set>      Control what characters are considered printable (default latin1)
-P number      set maximum number of processes on this node,
               valid range is [1024-134217727]
-Q number      set maximum number of ports on this node,
               valid range is [1024-134217727]
-R number      set compatibility release number,
               valid range [16-18]
-r             force ets memory block to be moved on realloc
-rg amount     set reader groups limit
-sbt type      set scheduler bind type, valid types are:
-stbt type     u|ns|ts|ps|s|nnts|nnps|tnnps|db
-sbwt val      set scheduler busy wait threshold, valid values are:
               none|very_short|short|medium|long|very_long.
-scl bool      enable/disable compaction of scheduler load,
               see the erl(1) documentation for more info.
-sct cput      set cpu topology,
               see the erl(1) documentation for more info.
-secio bool    enable/disable eager check I/O scheduling,
               see the erl(1) documentation for more info.
-sub bool      enable/disable scheduler utilization balancing,
               see the erl(1) documentation for more info.
-sws val       set scheduler wakeup strategy, valid values are:
               default|legacy.
-swct val      set scheduler wake cleanup threshold, valid values are:
               very_lazy|lazy|medium|eager|very_eager.
-swt val       set scheduler wakeup threshold, valid values are:
               very_low|low|medium|high|very_high.
-sss size      suggested stack size in kilo words for scheduler threads,
               valid range is [4-8192]
-spp Bool      set port parallelism scheduling hint
-S n1:n2       set number of schedulers (n1), and number of
               schedulers online (n2), maximum for both
               numbers is 1024
-SP p1:p2      specify schedulers (p1) and schedulers online (p2)
               as percentages of logical processors configured and logical
               processors available, respectively
-t size        set the maximum number of atoms the emulator can handle
               valid range is [8192-0]
-T number      set modified timing level, valid range is [0-9]
-V             print Erlang version
-v             turn on chatty mode (GCs will be reported etc)
-W<i|w|e>      set error logger warnings mapping,
               see error_logger documentation for details
-zdbbl size    set the distribution buffer busy limit in kilobytes
               valid range is [1-2097151]
-zdntgc time   set delayed node table gc in seconds
               valid values are infinity or intergers in the range [0-100000000]

Note that if the emulator is started with erlexec (typically
from the erl script), these flags should be specified with +.

Я могу правильно запустить сервер ejabberd. Я создал пользователя, и все прошло хорошо. Я не знаю, что происходит не так.

Моя конфигурация Elixir 1.1.1 и Erlang R18.

Любой комментарий приветствуется.

ОБНОВЛЕНИЕ 1

Я не передал ему никаких аргументов. Я сделал следующее:

  • Загрузите исходный файл и распакуйте его.

  • ./autogen потом ./configure --enable-all потом make && make install

  • Все прошло гладко. Я могу успешно запустить его и успешно остановить. Также я могу запустить его в режиме реального времени (ejabberdctl live).

Проблема в том, что когда я сталкиваюсь с этим ejabberdctl iexlive. Перед загрузкой ejabberd я установил Elixir 1.1.1. Не знаю может в этом проблема.

ОБНОВЛЕНИЕ 2

Я просмотрел код ejabberdctl и нашел проблему в этой строке кода:

ERLANG_OPTS=" +K $POLL -smp $SMP +P $ERL_PROCESSES $ERL_OPTIONS"

я меняю на

ERLANG_OPTS=""

И это сработало. Но я не знаю, создаст ли это дополнительные проблемы или нет. Я открою вопрос в их репозитории.


person Hadi    schedule 24.01.2016    source источник
comment
Тупой вопрос. Что происходит, когда вы передаете аргумент K в командной строке? Возможно, вы также захотите указать имена/версии всех задействованных программ: например, я запускаю это на Elixir 1.1.1.   -  person Onorio Catenacci    schedule 25.01.2016
comment
@OnorioCatenacci Я обновил свой вопрос.   -  person Hadi    schedule 25.01.2016
comment
Я предполагаю, что вам нужно выяснить, какими должны быть эти переменные среды (посмотрите на ответ ниже), а не просто удалить их.   -  person Onorio Catenacci    schedule 25.01.2016


Ответы (1)


Это связано с тем, что переменная $POLL в +K $POLL не была правильно инициализирована. Флаг +K включает или отключает функцию опроса ядра для виртуальной машины Erlang. Его допустимые значения: true или false.

Сценарий оболочки ejabberdctl имеет некоторые значения по умолчанию для $POLL и других параметров виртуальной машины Erlang. Также он использует файл конфигурации ejabberdctl.cfg и перезаписывает значения по умолчанию теми, которые включены в этот файл конфигурации.

Вы должны использовать ejabberdctl.cfg, чтобы установить нужные параметры, раскомментировав их следующим образом:

#' POLL: Kernel polling ([true|false])
#
# The kernel polling option requires support in the kernel.
# Additionally, you need to enable this feature while compiling Erlang.
#
# Default: true
#
POLL=true

#.
#' SMP: SMP support ([enable|auto|disable])
#
# Explanation in Erlang/OTP documentation:
# enable: starts the Erlang runtime system with SMP support enabled.
#   This may fail if no runtime system with SMP support is available.
# auto: starts the Erlang runtime system with SMP support enabled if it
#   is available and more than one logical processor are detected.
# disable: starts a runtime system without SMP support.
#
# Default: enable
#
SMP=enable

Этот файл находится на $ejabberd-installed-path/conf, если вы установили ejabberd вручную.

person Hamidreza Soleimani    schedule 25.01.2016
comment
Разве это не должно также устанавливать эти другие переменные среды? Переменные среды ERL_PROCESSES и ERL_OPTIONS? - person Onorio Catenacci; 25.01.2016
comment
@OnorioCatenacci Да, ERL_PROCESSES и ERL_OPTIONS, а также некоторые другие параметры доступны в ejabberdctl.cfg файле конфигурации. - person Hamidreza Soleimani; 25.01.2016
comment
@HamidrezaSoleimani Спасибо, я попробовал это решение, но, к сожалению, оно мне не помогло. - person Hadi; 26.01.2016