В одном из моих веб-приложений я отправляю ежедневные письма пользователям, используя функцию задания cron через AMAZON SES. 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 и начнется отправка писем. В конечном итоге пользователи получат почту дважды или трижды соответственно.
т.е. Если цикл содержит 500 данных
Cron A запустится в 12:00, соберет все 500 данных и отправит электронные письма. Предположим, отправить 120 писем за 10 минут.
Cron B запустится в 12:10 и будет получать данные от 120 до 500. Это также будет отправлять почту.
По этому результату 121-й пользователь получит почту от Cron A и Cron B.
Я попытался ограничить количество запросов. Но проблема в том, что мы не можем предсказать, когда закончится каждый цикл. т.е. иногда для отправки почты требуется 4,2,5,6 или 10 секунд.
Есть ли способ избежать этого дублирования? Есть ли способ убить существующий cronjob и начать новый?
заранее спасибо