首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >phpagi脚本随机停止

phpagi脚本随机停止
EN

Stack Overflow用户
提问于 2013-05-27 18:27:13
回答 1查看 3.1K关注 0票数 0

出于某种原因,phpagi脚本随机停在中间。这种情况每20-50次只发生一次。我注意到在星号CLI中有几个这样的“失败”实时时间。没有显示错误。脚本发送了几条冗长的消息,直到刚刚停止。

脚本用于计费,它有几个时间查询和sql查询。最大执行时间设置为30秒。

我没有在/var/log/messages或/var/log/asterisk/messages中发现任何错误

  • 星号1.6.2.24
  • PHP5.1.6 (cli) (构建:2012年6月27日12:21:13)上下文-x exten => 1,1,Dial(SIP/XXXXXX) exten => h,1,AGI(script.php)

你知道它为什么会停下来随便打电话吗?

谢谢。

更新:我刚刚注意到,当问题发生时,AGI返回4:

代码语言:javascript
复制
-- <SIP/xxxxxx-00000185>AGI Script script.php completed, returning 4

怎么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-28 13:53:10

据我从你的症状中听到的,这听起来不像是一个特别的星号问题,但是,可能是你的脚本的一个问题。以下是一些关于我如何在不知道AGI脚本本身的幕后情况下调试应用程序的技巧.

首先,AGI Script script.php completed, returning 4意味着您的脚本退出时没有干净的退出状态代码。returning 0是你想要看到的。通过运行脚本,然后使用$?变量检查状态代码,您可以在bash提示符下看到最后一个退出状态代码。就像这样:

代码语言:javascript
复制
[user@host ~]$ ./script.php
[user@host ~]$ echo $?
0

星号告诉你你的剧本发生了什么。任何非零的东西都是“这里出了问题”。一般来说,你可以根据你的喜好定制这些,所以具体来说,我不确定。

您需要做的一件事是打开agi调试,如下所示:

host*CLI> agi set debug on

然后运行您的脚本,并查看是否可以找到您的php脚本正在抛出任何错误。

另一个建议是确保您的php登录到syslog,以便您可以在/var/log/messages中找到错误。您可以通过在/etc/php.ini中设置以下行来做到这一点:

error_log = syslog

最后,为了复制错误,我建议使用一个开发框,并为自己创建一系列调用,并为创建一堆“调用文件”构建一个脚本。

这里有一个呼叫文件可以让您开始工作:

代码语言:javascript
复制
Channel: LOCAL/100@mycontext
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Application: Wait
Data: 30

创建文件后,将其移动到/var/spool/asterisk/outgoing (移动很重要,您希望指针移动,因为如果您首先在该目录中写入该文件,星号可能会太快地拾取该文件)。

您还可以在CLI的分机上发起调用:

host*CLI> channel originate LOCAL/100@mycontext application Wait 5

您还可能希望在调用文件中使用其他选项,例如CallerID: John Doe <8005551212>,以便在创建测试以复制问题时向您的AGI应用程序提供有趣的数据。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16778648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档