2012-03-27 12 views
0

私はGearmanワーカーコードでPHPスクリプトを実行しようとしていますが、期待される実行時間を超えている場合は、 も監視したいと思っています。タイムリーな方法で実行する(たとえば10分ごとに実行する)と、Gearmanクライアントが選択したスクリプトを実行し、Gearmanワーカーに送信します。GearmanによるPHPスクリプトの監視

Iは、以下のオプションを使用してみました:

1)独立したスクリプト、実行中のプロセスを監視し、通常のPHPスクリプトを使用してみました。 しかし、この通常のスクリプトは、ジョブが殺されたことをGearmanに知らせず、Gearmanは殺した仕事がまだ実行中だと考えています。

私は、同じ作業者でPHPスクリプトを実行するプロセスとプロセスを同期させなければならないと思いました。 これらのジョブも再起動する必要があり、クライアントが処理を行います。

2)次のコマンドを使用してPHPスクリプトを実行しています: cd /home/amehrotra/include/core/background;php $workload;(これはスクリプトの実行が終了するまでブロックされません)。

私はexecを試してみましたが、execはスクリプトを実行しません。 exec( "/ usr/bin/php/home/amehrotra/include/core/background/$ workload>/dev/null &");

3)実行中の2人の作業者、もう1人は監視用のPHPスクリプトを実行していますが、Geramanクライアントは2人の作業者に接続していません。

+0

GearmanワーカーがPHPを使用している場合は、内部的にアレンジすることができないため、処理されたファイル/レコードに「失敗」とマークされます。プロセスを殺すよりもはるかにエレガントなようだ。 – halfer

答えて

0

最もクールな計画ではありませんが、すべてが制御される中心的な場所としてデータベースを使用しようとします。 あなたの労働者にはいくらかの資源と時間がかかりますが、それを管理しやすくするためのコストです。

Workerは、dbによって割り当てられたコマンド(停止/再起動)を確認する必要があります。また、何らかのデータをdbに保存して、何が起きているのかを確認することもできます。

+0

の作業者はただの作業者の名前を渡して、exec( "scriptname.php>/dev/null 2> &1 &");でPHPスクリプトを実行して編集を再開してください) –

+0

作業開始時に、すべてのタスクの後にステータスを確認するステータスが停止している場合は自分自身を終了する再起動したらexec(kill XXX && sleep 1 && start) – wormhit