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
вижу ошибку