最も人気のあるクラス設計パターンは確かにシングルトンであり、単一のプロセス内でクラスオブジェクトの一意性を保証するパターンです。
しかし、プロセス自体を統一する必要がある場合はどうでしょうか? この記事では、これに必要なタスクとその達成方法について説明します。
はじめに
特定のスクリプトが単一のバージョンで排他的に実行されることが基本的に重要なタスクがいくつかあります。 複数のプロセスで並行して実行すると、さまざまな種類のオーバーレイが発生する可能性があります。これには多くの例がありますが、ほとんどの場合、バックグラウンドメール/ SMS、キャッシュ利用者、アクティブユーザーの監視、バックグラウンドバックアップなど、さまざまなバックグラウンドハンドラーになります。
実装する2つの方法
このようなタスクを実装するには、主に2つの方法があります。- 並行起動のすべての可能なオーバーレイを除外するスクリプトを作成します。
- システムを使用して、スクリプト実行の一意性を制御します。
ScriptAlone-プロセスの一意性の「コントローラー」
ScriptAloneは、オブジェクトがプロセスの一意性の「コントローラー」として機能するクラスです。 繰り返し最適化と改良が行われ、戦闘状態で100%テストされているため、自信を持って使用することをお勧めします。冗長にならず、その魅力をすべて説明するために、特定の例でどのように機能するかを知ることを提案します。
例
できるだけ早く着実に回復するはずの手紙のライブキューがあります。必要条件
- 送信するキューに文字があるかどうかを確認するために、常に実行されているスクリプトが必要です。
- メールの重複を防ぐために、スクリプトのコピーを1つだけ実行できます。
- エラーが原因でスクリプトが中断された場合は、できるだけ早く再起動する必要があります。
- いずれかの反復中にスクリプトがフリーズした場合は、できるだけ早く再起動する必要があります。
- メモリリークの可能性を防ぐために、スクリプトは5〜10時間ごとに再起動する必要があります。 この場合のスクリプト停止は、安全な方法で実行する必要があります(現在の反復のタスクが完了したとき)。
- スクリプトが現在実行されていることを示すインジケータが必要です
- スクリプトの実行を強制的に停止できる必要があります。
なすべきこと
- example.php -ScriptAloneを使用したシンプルなスクリプトを使用してください。
- サーバーでCRONを設定して、5分ごとにexample.phpが呼び出されるようにします 。
何が起こる
- スクリプトは常に実行されます。 新しい手紙の確認は毎秒行われます。
- 常に、スクリプトの1つのコピーのみが起動されます。
- スクリプトが中断されるか、1回の反復の制限時間を使い果たすと、スクリプトが再起動されます。
- 5時間ごとに、スクリプトは安全な方法で再起動されます。
- スクリプトを再起動すると、停止後5分以内にスクリプトが再起動されます。これは、5分ごとにスクリプトの次のコピーを実行しようとするCRON設定によるものです。
- ./example.php.worksファイルが存在することにより、スクリプトが現在実行されていることを確認できます。 また、そのコンテンツから、スクリプトのステータスに関する追加情報を取得できます。
PID:12656471471193231407
開始:2010-02-08 19:39:07
働いた:2010-02-08 19:39:10
有効期限:2010-02-08 19:39:26
- ./example.php.works.stopという名前のファイルを作成するだけで、スクリプトを停止できます。
健康に使用:)
最新バージョンのダウンロード、 RSSアップデートの購読 、またはプロジェクトページでの開発に参加 できます 。
建設的な批判とフィードバックを事前に感謝します:)
PS記事を書く過程で、Habrの奇妙な動作が明らかになりました:Script *で始まるすべての単語は小文字に変換されます-ScriptをSc riptに個別に置き換えることで修正されます。 *スクリプト*が発生するすべてのリンクは* scに置き換えられます; ript *はそれらを動作不能にします-* script *を* s%63ript *に置き換えることで修正されます。 サポートへの登録は解除されましたが、まだ回答がありません。