2012-12-14 5 views
0

저는 cronjob을 사용하는 공유 서버에서 매우 느린 PHP 스크립트를 실행하고 있습니다. (스크립트는 때때로 서버에서 실행을 일시 중지하는 일부 HTTP 요청을 수행합니다 ~ 15-20 초 내에 실행을 완료합니다.)비 차단 모드에서 cronjob에서 PHP 스크립트 실행

문제는 cronjob이 헬프 데스크에서 종료된다는 것입니다 공유 서버가 5 초 이상 연속해서 실행해서는 안된다고 말했습니다.

그래서 (심각한 최적화 작업을하기 전에) 스크립트를 실행하고 스크립트가 계속 실행되는 동안 즉시 리턴한다고 생각했습니다. 지금까지 두 가지 방법에 대해 생각했습니다.

  1. Cronjob은 PHP 스크립트가 끝날 때까지 기다리지 않습니다.
  2. Cronjob은 주 PHP 스크립트를 호출하고 두 번째 스크립트가 반환 될 때까지 기다리지 않고 바로 반환하는 더미 PHP 스크립트를 실행합니다.

내가 웹에 특히이 웹 사이트에서 모두 옵션에 대해 읽었습니다, 정말 작동 뭔가를 찾을 수 없습니다 : multi_curl 아무것도 바로 첫 번째 스크립트 마무리하면하지 않습니다 ...

미리 감사드립니다. 가능한 솔루션을


편집 난 그냥 내놓았다 한 : 그것은 당신이 여기에 또는 다른 곳에서도 웹에서 익숙 할 수있다 코드를 유사 할 수

header("Content-Length: 0"); 
header("Connection: close"); 
flush(); 

$mainUrl = 'mySecondScript.php'; 

$active= null; 
$mch = curl_multi_init(); 
$ch1 = curl_init($mainUrl); 
curl_setopt($ch1, CURLOPT_HEADER, 0); 

curl_multi_add_handle($mch, $ch1); 
$resultCurl = curl_multi_exec($mch, $active); 

do { 
$resultCurl = curl_multi_exec($mch, $active); 
} while ($resultCurl == CURLM_CALL_MULTI_PERFORM); 

-하지만이 경우 작동하지 않을 I 다른 사람들이 저를 위해 쓴 것처럼 그것을 사용하십시오 - 오직 이것처럼!

답변

1

PHP는 호스팅에 아래를 실행하는 사용자가 실행 권한을 가지고 있다면, 당신은 shell_exec를 사용할 수 있고 &가 백그라운드 프로세스를 실행하기 위해, 그래서이 같은 당신의 PHP 파일 : 나는 'shell_exec('/path/to/php /path/to/file >/dev/null 2>&1 &')

+0

감사 Michoel 전에는 그것을 시도했는데 어떤 이유에서든 첫 번째 스크립트를 호출하는 ~ 50 번 반복되는 루프를 발생 시켰습니다. 설명 할 수없는 현상 (모든 첫 번째 스크립트 작업은 두 번째 스크립트를 호출하는 것이고 두 번째 스크립트는 호출하지 않았습니다.) 어쨌든 나는 나는 두 가지 스냅 샷 (내가 두 가지로 작동하지 않았다)에서봤을 때 더러운 솔루션을 찾았다 고 생각한다. 내 첫 메시지를 편집하여 다른 사람들에게 도움이 될지 아니면 내 문제를 개선 할 수 있을지 생각해 보라. – Yizhar