这在Asterisk 1.8.32.3中运行良好-我正在以root用户身份在Centos 7上使用Asterisk 13.22.0进行测试(已经-如下所示):
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)})
也没有效果。
我还尝试在Centos 7中完全禁用/禁用SELinux-无效,错误仍然存在。
如果从shell / xterm运行脚本,则脚本可以正常运行。
如何像以前的Asterisk版本(例如1.6和1.8)一样,使Asterisk 13通过System()拨号计划应用程序执行简单的BASH脚本?
谢谢!
Stefan
答案 0 :(得分:1)
好的,这已经解决了。
事实证明,问题是我尝试通过拨号计划中的SYSTEM()和SHELL()调用传递的参数之一包含换行符(\ n或十六进制0x0a)。
在Asterisk 13.22.0中,似乎在对SYSTEM()或SHELL()的调用中,当换行(\ n)字符为时,解析和评估传递给SYSTEM()或SHELL()的Asterisk通道变量停止命中。
一旦我清理了变量(删除了\ n一个包含的变量,该变量源自我生成的UUID),并且所有传递给SYSTEM()拨号计划应用程序的变量的内容都是“干净的”-没有任何\ n字符- SYSTEM()拨号计划应用程序开始正常运行,并按预期使用带有Asterisk通道变量值的参数调用我的BASH脚本。
我的拨号方案没有变化,但是在bash脚本中,我正在运行以获取UUID(通过CURL到Java应用程序),
unsigned
我要做的就是这个:
echo $uuid
完成这一刻并将没有尾随换行符的UUID馈入我在Asterisk 13.22.0上的拨号计划中的SYSTEM(),SYSTEM()开始工作,一切正常。
答案 1 :(得分:0)
1)检查selinux
2)尝试在与pbx相同的用户下运行(请参阅asterisk.conf)
如果没有帮助,请停止星号,在控制台模式下启动星号
asterisk -vvvgc
看到错误