1

特定のリソースを集中的に使用するタスクがバックグラウンド プロセスによって処理される、PHP (CakePHP) で記述された Web サイトがあります。これは、Beanstalkd メッセージ キューを介して行われます。そのバックグラウンド プロセスのステータスを取得して、Monit で監視できるようにする方法が必要です。

バックグラウンド プロセスは、Beanstalkd と通信する CakePHP シェル (単なる PHP CLI スクリプト) です。Benastalkd で reserve() を実行し、新しいメッセージを待つだけです。メッセージを受け取ると、それを処理します。何か問題が発生した場合にバックグラウンド プロセスを再開できるように、 Monitを使用してこのプロセスを監視する何らかの方法が必要です。

これまで考えてきたことは、Beanstalkd にメッセージをドロップする PHP CLI スクリプトを作成することです。バックグラウンド プロセスがメッセージを取得し、何らかの方法でその内部ステータスを CLI スクリプトに伝えます。しかし、どのように?ソケット?共有メモリ?他の IPC メソッドはありますか?

それとも、ここでは複雑すぎるのでしょうか。Monit を使用してそのようなプロセスを監視するより簡単な方法はありますか?

前もって感謝します!

4

2 に答える 2

2

これが私が最終的にやったことです。

CLI スクリプトは、beanstalkd に接続し、新しいキュー (チューブ) を作成して監視を開始します。次に、バックグラウンド デーモンが監視しているキューに最も優先度の高いメッセージをドロップします。このメッセージには、CLI スクリプトが監視している新しいキューの名前が含まれています。

バックグラウンド プロセスは、このメッセージをほぼ即座に受信し (優先度が最も高いため)、ステータス メッセージを生成して、CLI スクリプトが監視しているキューに入れます。CLI スクリプトはそれを受け取り、キューを閉じます。

CLI スクリプトが 30 秒以内に応答を取得しない場合、バックグラウンド デーモンが (おそらく) ハングしていることを示すエラーで終了します。

これらすべてをMonitに結び付けました。Monit は、バックグラウンド デーモンが実行されていることを (pidfile およびプロセス リストを介して) チェックし、実際にメッセージを処理していることを確認できます (CLI ツールを使用して、ステータス リクエストに応答することをテストします)。

于 2009-11-30T22:50:56.403 に答える
1

おそらく、Monit または Nagios に接続して統計を実行し、「多すぎる」場合に戻るためのプラグインがあります。そのための「プロトコル」はまだ書かれていませんが、既存のテキストベースのプロトコル (nntp や smtp など) を変更して、やりたいことを実行するのはそれほど難しくないようです。ただし、見た目からして、Cで書くことを意味します。

CLI-PHP スクリプトから、2 つの異なる方法のうちの 1 つ (または両方) を使用します。

1/ (低めの) 優先度のメッセージをキューにドロップし、数秒以内に戻ってくることを確認します。それを専用のキューに入れ、そこに入れる前にそこに何もないことを確認することも良い追加です. 2/ 「統計」を実行し、待機中のジョブ数を確認します: 「current-jobs-ready」。

情報を Web サイトに戻すには (どちらの方法でも)、ファイルに書き込むか、gts が読み取って処理する Memcached のようなものに書き込むことができます。

于 2009-11-26T16:30:50.780 に答える