私の Web アプリケーションの 1 つで、AMAZON SES 経由で cron ジョブ機能を使用してユーザーに毎日メールを送信しています。cronjob は 10 分間隔で実行されます。プロセスは好きです
$sql-mysql_query("SELECT * FROM users WHERE send_date='2013-07-13' and alert_send=0");
while($row=mysql_fetch_array($sql)) {
// Get email id of the user and compose meggage
// Create a new Amazon Request and send the mail
// Update alert_send=1
}
ループにさらにカウントが含まれている場合、つまり 500 通のメールがあると仮定すると、次の 10 分で別の cron ジョブが開始され、メールの送信が開始されます。最終的に、ユーザーはそれに応じてメールを 2 回または 3 回受け取ります。
すなわち。ループに 500 個のデータが含まれる場合
Cron A は 12:00 に開始され、500 個のデータすべてを取得してメールを送信します。10 分で 120 通のメールを送信するとします。
Cron B は 12:10 に開始し、120 から 500 までのデータを取得します。これにより、メールも送信されます。
この結果、121 番目のユーザーが Cron A と Cron B からメールを受け取ることになります。
クエリ数を制限しようとしました。しかし問題は、各ループがいつ終了するかを予測できないことです。つまり、メールの送信に 4、2、5、6、または 10 秒かかることがあります。
この重複を避ける方法はありますか? 既存のcronjobを強制終了して新しく開始する方法はありますか?
前もって感謝します