2014-10-16 3 views
0

배경 프로세스를 실행하기 위해 Yii 확장자 runactions을 사용하고 있습니다. 백그라운드 프로세스로 대량 레코드 (6000)를 업데이트하려고하는데, 단지 약 2500 개의 레코드 만 DB로 업데이트되었습니다 !!! 로그에 오류가 없으며 간격 또는 시간 초과 문제와 관련이 있습니까?Yii 백그라운드 프로세스 문제

나는 runactions의 간격을 변경하려고하지만 효과가 없습니다. 아무도이 문제를 해결할 수 있도록 도와 주실 수 있습니까?

+0

이전에는 _runactions_을 사용하지 않았지만 대화를 돕기 위해 붙여 넣은 링크의 네 번째 유스 케이스 인 ERunActions :: runBackground()를 사용한다고 가정 할 수 있습니까? 또한 2500 레코드가 6000 개 중 처음 2500 개가 업데이트 되었습니까? – Jerome

+0

예 처음 2500 레코드 –

+0

이것은 아마도 PHP 스크립트의 시간 초과와 관련이 있습니다. http://php.net/manual/en/function.set-time-limit.php – topher

답변

1

이 확장 프로그램은 http 레벨에서 백그라운드 작업을 실행하므로 스크립트의 최대 실행 시간을 관리해야합니다.이 확장 프로그램이이를 처리하지 못합니다. 명령 줄 실행의 경우 최대 실행 시간이 적용되지 않습니다. 긴 과정에 대한

보통 http://php.net/manual/en/info.configuration.php#ini.max-execution-time

에서, tiemout을 해제하기보다는, 내가 사이클이 같은 그것을 증가 :

while ($i <= 10) { 
    my_complex_update_query(); 
    echo "Timeout is : " . ini_get('max_execution_time') . " sec.<br>"; 
    set_time_limit(ini_get('max_execution_time') + 1);  
    echo "NEW Timeout is : " . ini_get('max_execution_time') . " sec.<br>"; 
    $i++; 
} 

시간 제한이 매 사이클에서 1 초를 추가이 증가, 분명히 10 사이클마다 1 초를 추가하는 것과 같이 필요에 맞게 조정해야합니다. 이런 식으로 스크립트가 어떤 이유로 든 막히면 어쨌든 타임 아웃되어 메모리에 멈추지 않습니다.

외부 호출 (데이터베이스 쿼리, 시스템 호출 exec ...)이 스크립트 실행 시간에 계산되지 않는다고 생각하십시오. 스크립트가 5 초 실행되면 실행을 위해 2 분이 걸리는 쿼리를 수행합니다. 스크립트가 다음 명령으로 진행될 때 실행 시간은 여전히 ​​5 초가 아니라 2 분 + 5 초가됩니다.