從我從您的症狀中聽到的消息來看,聽起來不像是一個特殊的星號問題,但可能是您的腳本存在問題。這裏有一些關於如何在不知道AGI腳本本身背後發生的情況的情況下調試應用程序的技巧......
首先,AGI Script script.php completed, returning 4
表示您的腳本正在退出時沒有乾淨的退出狀態代碼。 returning 0
是你想看到的。您可以通過運行腳本,然後使用$?
變量檢查狀態代碼,在bash提示符處看到最後的退出狀態代碼。像這樣:
[[email protected] ~]$ ./script.php
[[email protected] ~]$ echo $?
0
這就是Asterisk告訴你發生了什麼事情腳本。任何非零的東西都是「這裏出了問題」。一般來說,你可以根據自己的喜好自定義這些,所以特別是4,我不確定。你會想要做
一件事是打開AGI調試像這樣:
host*CLI> agi set debug on
然後運行腳本,看看是否能找到你的PHP腳本被吐出任何錯誤。
我的另一個建議是確保你的php正在登錄到你的系統日誌,這樣你就可以在/ var/log/messages中發現錯誤。可以通過在你的/etc/php.ini
這條線設置做到這一點:
error_log = syslog
最後,要儘量複製錯誤,我會建議使用開發中,併發起了一堆自己的話費,並建立一個腳本到create a bunch of "call files"。
這裏有一個調用的文件,讓你開始:
Channel: LOCAL/[email protected]
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Application: Wait
Data: 30
當你創建一個文件,將其移動到/var/spool/asterisk/outgoing
(移動是很重要的,你要指針移動,因爲星號可以拿起文件如果你首先在那個目錄中寫信給它,太早了)。
你也可以發起從CLI的分機的電話:
host*CLI> channel originate LOCAL/[email protected] application Wait 5
您可能還需要使用呼叫文件中的其他選項,如CallerID: John Doe <8005551212>
以有趣的數據提供給您的AGI應用程序,同時創建測試來複制問題。
感謝您的詳細解答,但我不認爲這個問題與腳本有關,因爲它只發生在3%的調用中。我已經嘗試直接運行腳本,啓用agi調試,啓用PHP錯誤日誌到文件等。今天我發現了這個討論:http://lists.digium.com/pipermail/asterisk-users/2011-September /266522.html,我認爲我面臨同樣的問題。我將嘗試使用System()而不是AGI()。我會讓你知道結果。 – k4h
你正在運行什麼版本? /你嘗試過另一個版本嗎? – dougBTV
另外,查看與版本1.8.7有關的錯誤報告/修復 - https://issues.asterisk.org/jira/browse/ASTERISK-18811 – dougBTV