0

cronjob を使用して、共有サーバーで非常に遅い PHP スクリプトを実行しています。(スクリプトは、サーバーでの実行を時々中断するいくつかの HTTP 要求を実行します...実行は ~15 ~ 20 秒で完了します。)

問題は、cronjob がときどき終了することです。共有サーバーのヘルプ デスクから、5 秒以上連続して実行しないように言われました。

だから私は(深刻な最適化タスクに入る前に)スクリプトを実行し、スクリプトの実行中にすぐに戻ることを考えました。今まで私は2つの方法を考えていました:

  1. Cronjob は、PHP スクリプトがジョブを完了するのを待ちません。
  2. Cronjob はダミーの PHP スクリプトを実行します。このスクリプトはメインの PHP スクリプトを呼び出し、2 番目のスクリプトが戻るのを待たずにすぐに戻ります。

Web と特にこの Web サイトで両方のオプションについて読みましたが、実際に機能するものは見つかりませんでした。最初のスクリプトがすぐに終了すると、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);

ここやウェブのどこかでおなじみのコードに似ているかもしれませんが、他の人が私のために書いたように使用すると機能しません。

4

1 に答える 1

1

ホスティングで PHP を実行するユーザーが実行権限を持っている場合、shell_execと & を使用してバックグラウンド プロセスを実行することができます。つまり、PHP ファイルで次のようにします。shell_exec('/path/to/php /path/to/file >/dev/null 2>&1 &')

于 2012-12-14T16:38:59.523 に答える