1は、ローカルアプリケーションで選んだだろうとまったく同じ戦略が使用されます。
プロセスは、「ロックファイル」を管理。
ファイルシステムで静的ロケーションを定義します。スクリプトの起動時に、その場所にロックファイルが存在するかどうかを確認します。最初にそのロックファイルを作成していなければ、次に進みます。スクリプトの解凍中に、そのロックファイルを再度削除します。そのようなロックファイルは単純な受動的なファイルであり、その存在は興味があり、しばしばその内容ではありません。これは標準的な手順です。
ロックファイルをパッシブセマフォとして使用するだけでなく、生成プロセスのプロセスIDを保存すると、余分なキャンディーポイントを獲得できます。これにより、その後のプロセスの検証が実際にはまだ行われているか、平均してクラッシュしてしまいます。このようなクラッシュは古いロックファイルを残し、デッドロックを引き起こすので意味があります。正しくの一部では、PHPスクリプトを単独でウェン環境プロセスIDに使用されているシナリオが確実かどうかをテストするために十分ではないかもしれないと述べているコメントで述べた問題を回避するには
は、ではなく、が直接PHPスクリプト自体を実行するタスクにトリガーしますが、単なるラッパースクリプトです。そのラッパーは実行される実際のタスクをHTTPサーバーにサブ要求に委任しながらロックファイルを管理します。これにより、制御ラッパー・スクリプトは要求状態の追加情報を使用できます。 PHPスクリプトを実行している実際のタスクが実際に予告なしにクラッシュした場合、要求しているラッパーはそのことを知っています:各要求は、実行中のタスクが正常に終了したかどうかを判断できる特定のHTTPステータスコードで終了します。その設定は、ほとんどの目的にとって十分に信頼できるものでなければなりません。簡単なラッパースクリプトのクラッシュまたは終了の可能性は、確実に処理できるロック戦略がないシステム障害の領域に入ります。
フラグを設定する:ファイルを作成する、データベースにフラグを保存する、またはRedisまたはmemcachedキーを使用する。最終的に有効期限が切れるように設定するか、最初のスクリプトが終了した場合は手動でクリーンアップするようにしてください。 –
スクリプトが長時間実行されても信頼できる「期限切れ」を実装するのは難しいです。それが失敗した場合、我々はそれが死んだことを確かめるために未知の時間を待つ必要があるだろう。 – dronus
これはXY問題である可能性が非常に高い。 PHPスクリプトが一度だけ実行されていることを確認するには、どのような理由でこのチェックが必要ですか?私は、おそらく、この認識された解決策を伴わない実際の問題に対するより良いアプローチがあるため、尋ねています。 – Mjh