web-dev-qa-db-ja.com

プロセスの監視

以前の投稿で、pythonを使用して、レコードがpostgresデータベースに挿入または削除されたときに「何かを行う」方法について説明しています。最後に、メッセージキューを使用して「ジョブ "(beanstalkd)。私はすべてをセットアップして、別のpythonプロセスでキューを監視して「処理を行う」プロセスで実行しています。私は本当に「システム」の男ではないので、プロセスの監視に取り掛かり、プロセスが失敗したり、終了したりして、再起動して通知が送信されることを確認するのに適した方法です。Googleはいくつかの良いアイデアを提供しましたが、私はここで、私は間違いなく同様のことをしてください。

プロセスはシステムにとって重要であり、常に機能する必要があるだけで、機能しない場合は対処する必要があり、問題が解決するまでシステムの他の部分が「一時停止」されます。

私の考えは、プロセスが実行されているかどうかを確認するcronscriptを1〜2分ごとに実行することでした。そうでない場合は再起動します。別のスクリプト(または最初のスクリプトの別の機能)は、ジョブを監視し、処理を待機しているジョブが特定のしきい値に達した場合に、大きな問題があることを示すフラグを立てることです。

プロセスの詳細...プロセスは、レガシーシステムの注文を、倉庫から出荷またはバックオーダーされた数量のアイテムで更新します。 SOこれらの処理が行われない場合、注文が請求されると、数量が正しくなくなり、関係者は各行をチェックしない限り、これを見つける良い方法がありません。また、注文に「はい、触れられました」というフラグがあり、請求書エージェントに通知するだけではない場合もあります。

これと同じ方法が、UPSWorldshipからの注文の発送時期に基づいた発送情報で注文を更新するために使用されます。

わからない、私はこれを処理していると思うが、それはただ「ぎこちない」と感じる。

4
Ominus

Beanstalkdのpidにはwait()を使用できます。終了した場合(クリーンまたはその他の場合)、wait()は終了コードを返し、プロセスをすぐに再開できます。

Beanstalkdはキューを保持します(指定した場合-b)したがって、beanstalkdプロセスが時々クラッシュすることはおそらく問題ではありません。ただし、その時点で、ポストトリガーはデータをbeanstalkdキューにプッシュできません。このため、postgresでは別のキューテーブルを使用します。トランザクションは、このテーブルにレコードを追加します。定期的な(たとえば、1秒に1回)プロセスがこのテーブルをチェックし、データをbeanstalkdにプッシュし、beanstalkdがデータを確実に受け入れた場合にのみキューテーブルからデータを削除します。

この設定では、beanstalkdがデータを提供するシステムにデータが完全にタイムリーに送信されないという最悪のケースになります。システムの他の部分は実際に一時停止する必要はありません。すべてが再び正常になったら、メッセージのバックログは最終的にクリアされるためです。

2
9000