重複の可能性:
すでに実行されている場合、cronジョブの実行を防ぐ方法
cron
完了するまでに2分または5時間かかる可能性のある仕事があります。このジョブが常に実行されるようにする必要があります。
私の質問は:
前のものが完了した後に開始しますか、それとも両方が同時に実行され、毎分実行するように設定した場合、データベースを台無しにしますか?
重複の可能性:
すでに実行されている場合、cronジョブの実行を防ぐ方法
cron
完了するまでに2分または5時間かかる可能性のある仕事があります。このジョブが常に実行されるようにする必要があります。
私の質問は:
前のものが完了した後に開始しますか、それとも両方が同時に実行され、毎分実行するように設定した場合、データベースを台無しにしますか?
それらは同時に実行されます。これを回避する標準的な方法は、ファイルロック(一般にフロックと呼ばれます)を作成することです。ロックが使用できない場合は、実行しないでください。
Zdenekのアプローチに対するこれの利点は、データベースを必要とせず、プロセスが終了すると、群れが自動的に解放されることです。これには、プロセスが強制終了されたり、サーバーが再起動されたりする場合が含まれます。
cronジョブが何で書かれているかについては言及していませんが、flockはほとんどの言語で標準です。ロックと使用している言語をグーグルで検索することをお勧めします。これは、ランダムなタイムアウトに依存せず、より堅牢なソリューションになるためです。SOの例を次に示します。
両方が同時に実行されます。
データベースに記録することをお勧めします。スクリプトがいつ開始され、タスクが正常に終了したかを記録します。スクリプトは、dbのレコードも更新する必要があります(5分ごとなど)。まだ実行中です。
新しいジョブが開始されると、以前のすべてのタスクが終了したか、または最後の更新が数分(?)以上前であったかどうかを確認する必要があります。「はい」の場合は実行し、「いいえ」の場合は終了します。
このようにして、前のスクリプトが実行されているか、スクリプトが終了した場合、終了しておらず、10分間更新されていないジョブが終了としてマークされます。
複数のサーバーがあり、それらのいずれかでタスクをトリガーできる場合は、このソリューションの方が群れよりも優れている可能性があることに注意してください。