В одном из моих веб-приложений я отправляю ежедневные письма пользователям, используя функцию задания cron через AMAZON SES. Cronjob будет работать в интервале 10 минут. Процесс будет, какPHP-MySQL cronjob, отправляющий повтор цикла почты
$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 мин, работа другой хрон начнет и отправлять почту. В конце пользователи получат почту дважды или три раза соответственно.
ie. Если петля содержит 500 дат
Cron A начнется в 12:00 и выберет все 500 данных и отправит электронные письма. Предположим отправить почту 120 с 10 минутами.
Cron B начнется в 12:10 и получит данные от 120 до 500. Это также отправит почту.
К этому результату, 121-й пользователь будет получать письма от Cron А и В. Крон
Я попытался из предела подсчета запросов. Но проблема в том, что мы не можем предсказать, когда заканчивается каждый цикл. т.е. иногда для отправки почты потребуется 4,2,5,6 или 10 секунд.
Есть ли способ избежать дублирования? Есть ли способ убить существующий cronjob и начать новый?
Заранее спасибо
вы можете обновить запись столбца alert_send до 1 от 0 раз почты отправляется на эту запись. Таким образом, 2-я cronjob не получит эту запись. –
Теперь я делаю то, что вы упомянули. Но если первое задание выбрало 300 записей и отправку, второе задание также извлекает эти 300 записей, потому что оно не установлено в alert_send = 0. Но все же работа. Отправка писем в этот список. – ramesh