пятница, 18 января 2013 г.

Решение проблемы "unable to connect to remote asterisk"

Довольно часто, да что там, практически постоянно мы видим данную надпись после свежей установки Asterisk на сервер. Происходит подобная ошибка потому что Asterisk запускается сразу, без предварительной настройки сервиса. Как результат, попытка подключиться к Asterisk при помощи команды "asterisk -r" огорчает нас следующим сообщением:
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
Я опишу последовательность шагов которые позволят избежать появление данной ошибки. Asterisk запускаем на дистрибутивах CentOS 5 или CentOS 6, в других дистрибутивах содержание и местонахождение файлов может отличаться.
  1. Создаём пользователя. На сервере нам потребуется пользователь под которым будет запускаться Asterisk, заводим пользователя с командой “useradd asterisk”. Параметры по умолчанию заданные при создании пользователя можно посмотреть с помощью команды “useradd -D”. При создании пользователя будет также создана одноимённая группа.
  2. Настраиваем запуск Asterisk. Открываем на редактирование файл "/etc/sysconfig/asterisk" и выставляем переменные "AST_USER" и "AST_GROUP" в соответствии с созданным пользователем под которым должен быть запущен Asterisk. Если имя пользователя совпадает с именем группы то оставляем "AST_GROUP" закомментированным, в этой переменной будет использовано значение из "AST_USER". При отсутствии файла "/etc/sysconfig/asterisk" переменные "AST_USER" и "AST_GROUP" могут также выставляться в файле "/etc/rc.d/init.d/asterisk".
  3. Выставляем права на файл asterisk.ctl. Открываем на редактирование файл “/etc/asterisk/asterisk.conf” и в разделе [files] выставляем следующую конфигурацию:
[files]
astctlpermissions = 0660
astctlowner = asterisk
astctlgroup = asterisk
astctl = asterisk.ctl
Перезапускаем Asterisk и подключаемся с помощью команды
$ asterisk -r

4 комментария:

  1. Очень часто эта ошибка появляется из-за скрипта запуска:
    /etc/rc.d/init.d/asterisk

    Для решения этой проблемы нужно:

    Найти: VERSION=`${AST_SBIN}/asterisk -rx 'core show version'`
    Заменить: VERSION=`${AST_SBIN}/asterisk -rx 'core show version' 2>/dev/null`

    ОтветитьУдалить
  2. Скорее всего это происходит потому что в скрипте запуска или в файле safe_asterisk закомментирован вывод на консоль tty9. После вашего комментария я вспомнил что когда то давным давно я с сталкивался с подобной проблемой. В этом случае возможно более разумно будет отыскать и раскомментировать вывод на tty9

    ОтветитьУдалить
  3. А если не создается ctl файл, куда копать? на /var/run/asterisk права верные. С systemctl start asterisk сервис стартует, но сокета нет. Если запускать вручную через asterisk -vc, то все заводится и сокет появляется

    ОтветитьУдалить