星号13-system()Dialplan应用程序无法在文件系统上调用bash脚本

时间:2018-07-26 08:20:06

标签: bash shell asterisk dialplan

这在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

2 个答案:

答案 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

看到错误