PHPでバックグラウンドプロセスを作成したい
私はこれらすべてをクライアント側のAJAX呼び出しとサーバー側のPHPで試しています。
実際、私はたくさんのURLを廃棄しています。これを行うために、テキスト領域にすべてのスクラップURLをリストし、POSTメソッドを使用してフォームを送信しています。フォームアクションはPOSTデータをキャッチし、バックグラウンドスクリプトに渡します。たくさんのURLを渡すことができるので、1000になる可能性があります。これは、スクリプトをオンデマンドでバックグラウンドで実行し、完了するとファイルまたはデータベースに出力を返すためです。(プロセスIDをファイルまたはデータベースに書き込みます。実行できます)
15分後に実行されるこのためのバックエンドcronジョブを設定したくありません。
私たちが一般的に解析するために使用したPHPコードに伴う問題は、スクリプトの実行が完了するまで、ブラウザーを閉じたり、ページを変更したりできないことです。しかし、ページを変更したいのですが、ブラウザも使用できますが、スクリプトはバックグラウンドで実行する必要があります。
私の理解はこの場合です:
私が正しければ、他の言語のチャンネルと同じように動作しています。
私はPHPコードで解決します:私はこの以下のスクリプトが私が望むように機能すると思いますか、それとも別の方法を見つける必要がありますか?
$cmd = "php test.php > testoutput.php 2>&1 & echo $!";
exec($cmd, $pid);
echo "Script Running with ".$pid;
exit;
あなたはそのようにそれをするべきではありません。あなたがやろうとしているコードは信頼性が低く、維持するのが難しく、遅く、あなたがそれをどのようにすべきかではありません。はい、Chetanがすでに述べたように、このphpのようなことはバックグラウンドプロセスを実行することができます。ただし、これは適切なアプローチではありません。
私があなたに提案するのはこれです:
a。)URL、ID、ステータスなどのジョブの説明を含むデータベーステーブルを作成して、後でそれに基づいてフィルタリングできるようにします。
b。)監視対象または使い慣れたその他のサービス管理によって実行されるプログラムを脇に置きます。このようにして、追加のワーカーが空いたときにデータベースから次に利用可能なジョブをプルするスクリプトを作成できます。
c。)その新しいテーブルのプライマリIDを「ジョブID」として使用します。たとえば、WebSocketを使用して、顧客にジョブのステータスを表示することができます。
理想的には、これにはデータベースを使用しませんが、実際には、rabbitmqやその他のキューイングシステム、さらにはredisなどのものを使用します。
お役に立てれば!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加