2013-05-27 3 views
1

어떤 이유로 phpagi 스크립트가 중간에 무작위로 멈 춥니 다. 이는 20-50 건에 한 번만 발생합니다. 별표 CLI에서 실시간으로 여러 가지 '실패'를 알 수있었습니다. 오류가 표시되지 않았습니다. 스크립트가 중지 될 때까지 여러 가지 자세한 메시지를 보냈습니다.phpagi script randomly stops

스크립트는 대금 청구를 위해 사용되며 여러 개의 while 및 sql 쿼리가 있습니다. 최대 실행 시간은 30 초로 설정됩니다.

내가 /는/var에서 오류를 발견/별표/로그/메시지 또는/var에 기록하지 않았다/메시지

  • 별표 1.6.2.24
  • 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) 
    

그냥 무작위로 호출을 막을 수 왜 어떤 아이디어가?

감사합니다.

는 UPDATE :

-- <SIP/xxxxxx-00000185>AGI Script script.php completed, returning 4 

이 문제점은 무엇입니까 : 난 그냥 문제가 발생하면 AGI 4를 반환 것으로 나타났습니다?

답변

4

귀하의 증상으로 들었을 때, 특히 별표 문제 인 것처럼 들리지는 않지만 귀하의 스크립트에 문제가 될 수 있습니다. 여기가 AGI 스크립트 자체의 뒤에서 무슨 일이 일어나고 있는지에 대한 지식 없이도 응용 프로그램을 디버깅에 대한 갈 것입니다 방법에 대한 팁 수 ... 첫째

이야, AGI Script script.php completed, returning 4는 스크립트가 깨끗한 종료 상태 코드없이 종료되는 것을 의미 . returning 0은 귀하가보고 싶은 것입니다. 스크립트를 실행 한 다음 $? 변수를 사용하여 상태 코드를 확인하면 bash 프롬프트에서 마지막 종료 상태 코드를 볼 수 있습니다. 좋아요 :

[[email protected] ~]$ ./script.php 
[[email protected] ~]$ echo $? 
0 

그런데 별표가 스크립트에 무슨 일이 일어 났는지 알려줍니다. 0이 아닌 것은 "뭔가 잘못되었습니다"입니다. 일반적으로 원하는대로 사용자 정의 할 수 있으므로 특히 확실하지 않습니다. 그런 다음 스크립트를 실행

host*CLI> agi set debug on

을, 당신이 당신의 PHP 스크립트가 오류를 뱉어 것을 찾을 수 있는지 : 당신이 원하는 것

한가지과 같이 AGI의 디버깅을합니다.

또 다른 권장 사항은 PHP가 syslog에 로깅되어 있는지 확인하여/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에서 확장 통화를 발신 할 수 있습니다

또한 흥미 데이터를 공급하기 위해 같은 CallerID: John Doe <8005551212>로 호출 파일에 다른 옵션을 사용할 수 있습니다 host*CLI> channel originate LOCAL/[email protected] application Wait 5

당신의 AGI 응용 프로그램을 사용하여 문제를 복제하는 테스트를 만듭니다.

+0

자세한 해줘서 고맙습니다. 그러나이 문제는 스크립트와 관련이 있다고 생각하지 않습니다. 전화의 3 % 정도만 발생하기 때문입니다. 나는 이미 직접 스크립트를 실행하고, agi 디버그를 활성화하고, PHP 오류 로그를 파일에 적용하려고 시도했다. 오늘은이 토론을 발견했다 : http://lists.digium.com/pipermail/asterisk-users/2011-September /266522.html 나는 같은 문제에 직면하고 있다고 생각한다. AGI() 대신 System()을 사용하려고합니다. 결과를 알려 드리겠습니다. – k4h

+0

실행중인 버전은 무엇입니까?/다른 버전을 사용해 보셨습니까? – dougBTV

+0

또한 버전 1.8.7에 관련된 버그 보고서/수정을 확인하십시오 - https://issues.asterisk.org/jira/browse/ASTERISK-18811 – dougBTV