cronでトリガーされたプロセスの並列処理を停止する

cronでトリガーされたプロセスの並列処理を停止する

私は15分ごとにいくつかのPHPスクリプトを起動するようにWebサーバーcronジョブを設定しましたが、時には同じスクリプトの他のプロセスが起動したときにスクリプトの実行を完了するのに15分以上かかります。これは私たちの論理に問題を引き起こします。私は同じプロセスの1つのインスタンスを実行し、それが完了したら別のプロセスだけを実行しようとしています(プロセスをキューに入れずにその瞬間に終了し、次の間隔で実行するだけです)。

例:15分ごとにWebサーバークローンジョブによって呼び出される3つのPHPファイルがあります。 a.php、b.php、c.phpを想定します。スクリプトの実行が完了するまでに15分以上かかることがあります。実行が完了するとデータベースが更新されるため、同じスクリプトファイルの2つのコピーを実行することはできません(これによりロジックが中断されます)。 a.phpが午後4時に実行され、cronが午後4時15分にa.phpを再実行するとします。ここでは、a.phpの実行が完了したことを確認したいと思います。そうでない場合は、呼び出しをスキップせずに同じ内容を確認し、午後4時30分に実行します。ただし、b.php、c.php、a.phpは並列に実行されます(ただし、同じインスタンスは可能です)。 T)。

ベストアンサー1

標準的な慣行はpidファイルを使用することです。スクリプトが実行されるたびにファイルを確認し、すでにどこかで実行されていることを確認します。作業順序については後述する。

  • PIDを読む/var/run/yourscriptname.pid
  • pidが実行中であることを確認し、そうであれば終了します。
  • あなたのpidを入手して書く/var/run/yourscriptname.pid
  • 通常の実行
  • pidファイルの削除

あなたの場合はこれを行うことができますが、場合によっては、pidをチェックしてpidfileを書き込む間に他のプロセスが開始され、pidfileが表示されずに実行を続けるのに十分な速さでスクリプトが呼び出されることがあります。提案ロックを使用すると、状況をさらに強化できます。ほとんどすべてのUnixのオペレーティングシステムが提供する機能です。

引用:

おすすめ記事