質問

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

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

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

または私はおそらくここで複雑すぎて、Monitでそのようなプロセスを監視するはるかに簡単な方法がありますか?

事前に感謝します!

役に立ちましたか?

解決

最後にやったことは次のとおりです。

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

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

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

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

他のヒント

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

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

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

情報をWebサイトに戻す(どちらの方法でも)には、ファイルに書き込むか、Gtsが読み取り、実行したMemcachedなどに書き込みます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top