アイテム (URL) に対して 7 日ごとに順番に実行する必要がある 4 つのタスク (t1、t2、t3、t4) があります。Gearman を使用してこれらのタスクを実行し、cronjob を使用してアイテムを Gearman キューに送信します。アイテムの各タスクには、date_run が割り当てられています。t1 の date_run が今から 7 日以内の場合、そのタスクはキューに送信されます。t2 の date_run が t1 より小さい場合、そのタスクはキューに送信されます... など。
私が抱えている問題は、アイテムの t1 がキューに入れられたが、cronjob が再び開始される前に終了する時間がない場合です。タスクが完了するまで date_run は更新されないため、タスクがキューに入れられていないように見え、キュー内の同じアイテムに対して t1 の重複が発生します。
私が考えた解決策は次のとおりです。
- 各タスクに一意の識別子を追加し、それらが既にキューに入れられているかどうかを確認します
- キューが空かどうかを確認し、空になるまでこれ以上タスクをキューに入れないでください。
- アイテム テーブルに date_queued を追加し、これを t1 の date_run の代わりに使用して、7 日ごとにタスクをスケジュールします。
この問題を解決する「最善の方法」があれば、最初にstackoverflowをチェックすると思いましたか?私はそれについて頭をつかむことができないようです。:S
ありがとう!