0

这在 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 13 像以前的 Asterisk 版本(如 1.6 和 1.8)那样通过 System() dialplan 应用程序执行简单的 BASH 脚本?

谢谢!

斯特凡

4

2 回答 2

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 应用程序)我有这个:

echo $uuid

我所要做的就是:

echo -n $uuid

完成的那一刻,没有尾随换行符的 UUID 被馈送到我在 Asterisk 13.22.0 上的拨号计划中的 SYSTEM(),SYSTEM() 开始工作,一切正常。

于 2018-07-27T14:55:23.403 回答
0

1)检查selinux

2)尝试在与 pbx 相同的用户下运行(请参阅 asterisk.conf)

如果没有帮助,停止星号,在控制台模式下启动星号

asterisk -vvvgc

看到错误

于 2018-07-26T12:30:27.203 回答