Asterisk 13 - приложение dialplan системы () не может вызвать bash-скрипт в системе регистрации

Это работало нормально в Asterisk 1.8.32.3 - я тестирую Asterisk 13.22.0 на Centos 7, работающем от имени пользователя root (уже - как вы увидите ниже):

same=>n,System(/usr/src/bash/setData.sh ${CHANNEL(accountcode)})

Разрешения скрипта:

[root@localhost bash]# ls -l
-rwxr-xr-x 1 root root 1493 Jan 20  2016 setData.sh 
[root@localhost bash]# pwd 
/usr/src/bash
[root@localhost bash]#

Я обновился до Asterisk 13, и теперь Asterisk не может выполнить сценарий setData.sh:

[Jul 25 10:33:21] WARNING[30982][C-00000238] app_system.c: Unable to execute '/usr/src/bash/setData.sh'

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

Я попытался запустить звездочку от имени пользователя root, не повезло - см. Выше.

Я установил разрешения на выполнение сценария всеми, не работает.

Я изменил код набора номера на

same=>n,System(/bin/bash /usr/src/bash/setData.sh ${CHANNEL(accountcode)})

тоже не влияет.

Я также попытался полностью отключить / деактивировать SELinux в Centos 7 - безрезультатно, ошибка сохраняется.

Если вы запускаете скрипт из оболочки / xterm, он работает правильно.

Как заставить Asterisk 13 выполнять простой скрипт BASH через приложение плана набора System(), как это было в предыдущих версиях Asterisk, таких как 1.6 и 1.8?

Спасибо!

Стефан

2 ответа

Хорошо, это решено.

Оказывается, проблема в том, что один из параметров, которые я пытался передать через вызовы SYSTEM() и SHELL() в моей диалплане, содержал символ перевода строки (\n или hex 0x0a).

Похоже, что в Asterisk 13.22.0 при вызове SYSTEM() или SHELL() анализ и оценка переменных канала Asterisk передаются в SYSTEM() или SHELL() STOPS при попадании символа перевода строки (\n).

После того, как я очистил переменные (удалив из них \ n одну переменную, созданную из UUID, который я генерировал), и все содержимое переменных, переданных в приложение набора номеров SYSTEM(), были "чистыми" - без каких-либо символов \ n - SYSTEM() приложение dialplan начало нормально работать и начало вызывать мой BASH-скрипт с параметрами, со значениями переменных канала Asterisk, как и предполагалось.

Никаких изменений в моем плане набора номеров, но в bash-скрипте, который я выполнял, чтобы получить UUID (через CURL для приложения Java), у меня было следующее:

echo $uuid

и все, что мне нужно было сделать, это:

echo -n $uuid

В тот момент, когда это было сделано, и UUID без завершающего перевода строки был передан SYSTEM() в моем диалплане на Asterisk 13.22.0, SYSTEM() начал работать, и все работало.

1) проверьте selinux

2) попробуйте запустить под тем же пользователем, что и ваш pbx(см. Asterisk.conf)

если не поможет, остановите звездочку, запустите звездочку в режиме консоли

asterisk -vvvgc

вижу ошибку

Другие вопросы по тегам