出于某种原因,phpagi脚本随机停在中间。这种情况每20-50次只发生一次。我注意到在星号CLI中有几个这样的“失败”实时时间。没有显示错误。脚本发送了几条冗长的消息,直到刚刚停止。
脚本用于计费,它有几个时间查询和sql查询。最大执行时间设置为30秒。
我没有在/var/log/messages或/var/log/asterisk/messages中发现任何错误
你知道它为什么会停下来随便打电话吗?
谢谢。
更新:我刚刚注意到,当问题发生时,AGI返回4:
-- <SIP/xxxxxx-00000185>AGI Script script.php completed, returning 4怎么了?
发布于 2013-05-28 13:53:10
据我从你的症状中听到的,这听起来不像是一个特别的星号问题,但是,可能是你的脚本的一个问题。以下是一些关于我如何在不知道AGI脚本本身的幕后情况下调试应用程序的技巧.
首先,AGI Script script.php completed, returning 4意味着您的脚本退出时没有干净的退出状态代码。returning 0是你想要看到的。通过运行脚本,然后使用$?变量检查状态代码,您可以在bash提示符下看到最后一个退出状态代码。就像这样:
[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
最后,为了复制错误,我建议使用一个开发框,并为自己创建一系列调用,并为创建一堆“调用文件”构建一个脚本。
这里有一个呼叫文件可以让您开始工作:
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应用程序提供有趣的数据。
https://stackoverflow.com/questions/16778648
复制相似问题