2013-07-18 3 views
0

В одном из моих веб-приложений я отправляю ежедневные письма пользователям, используя функцию задания 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 и начать новый?

Заранее спасибо

+0

вы можете обновить запись столбца alert_send до 1 от 0 раз почты отправляется на эту запись. Таким образом, 2-я cronjob не получит эту запись. –

+0

Теперь я делаю то, что вы упомянули. Но если первое задание выбрало 300 записей и отправку, второе задание также извлекает эти 300 записей, потому что оно не установлено в alert_send = 0. Но все же работа. Отправка писем в этот список. – ramesh

ответ

Смежные вопросы