出于某种原因,phpagi脚本在中间随机停止。这种情况只发生在每20-50个电话一次。我能够注意到几个这样的'失败'在星号CLI中实时。没有显示错误。脚本发送了几条详细消息,直到停止。
脚本用于计费,它有几个while和sql查询。最大执行时间设置为30秒。
我在/ var / log / messages或/ var / log / asterisk / messages中找不到任何错误
PHP 5.1.6(cli)(建于2012年6月27日12:21:13)
[context-x]
exten => 1,1,Dial(SIP/XXXXXX)
exten => h,1,AGI(script.php)
为什么它可以停止随机调用的任何想法?
感谢。
更新: 我刚刚注意到,当问题发生时,AGI返回4:
-- <SIP/xxxxxx-00000185>AGI Script script.php completed, returning 4
出了什么问题?
答案 0 :(得分:3)
从我听到的症状来看,听起来并不是特定的Asterisk问题,但是,可能是你的脚本问题。以下是关于如何调试应用程序而不知道AGI脚本本身幕后发生的事情的一些提示......
首先,AGI Script script.php completed, returning 4
表示您的脚本退出时没有干净的退出状态代码。 returning 0
是您希望看到的。您可以通过运行脚本然后使用$?
变量检查状态代码,在bash提示符下查看最后一个退出状态代码。像这样:
[user@host ~]$ ./script.php
[user@host ~]$ echo $?
0
这就是Asterisk告诉你脚本发生了什么的原因。任何非零都是“这里有些不对劲”。一般来说,你可以根据自己的喜好自定义这些,特别是4,我不确定。
你要做的一件事就是开启agi调试:
host*CLI> agi set debug on
然后运行你的脚本,看看你是否能发现你的php脚本正在吐出任何错误。
我的另一个建议是确保你的php登录到你的syslog,这样你就可以在/ var / log / messages中找到错误。您可以在/etc/php.ini
这一行中设置:
error_log = syslog
最后,为了尝试复制错误,我建议使用开发框,并为自己发起一堆调用,并为create a bunch of "call files"构建一个脚本。
这是一个让你入门的调用文件:
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应用程序。