PHP-MySQL cronjob发送邮件循环重复
在我的一个web应用程序中,我通过amazonses使用cron作业功能向用户发送每日邮件。cronjob将以10分钟的间隔运行。这个过程会像PHP-MySQL cronjob发送邮件循环重复,php,mysql,amazon-web-services,cron,cron-task,Php,Mysql,Amazon Web Services,Cron,Cron Task,在我的一个web应用程序中,我通过amazonses使用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 megga
$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个数据并发送电子邮件。假设在10分钟内发送120封邮件
Cron B将在12:10开始,从120-500获取数据。这也将发送邮件
通过这个结果,第121个用户将获得来自Cron A和Cron B的邮件
我试图限制查询计数。但问题是我们无法预测每个循环何时结束。有时发送邮件需要4、2、5、6或10秒
有没有办法避免这种重复?有没有办法杀死现有的cronjob并重新开始
提前感谢每次启动cronjob时,您都可以杀死正在运行的cronjob 像这样的名字:
pkill process-name
或者像这样通过id:
kill 1234
您还可以查看这个使用php代码的博客:
一旦向该记录发送电子邮件,您可以将记录列alert\u send从0更新为1。这样一来,第二个克朗乔布就不会得到这张唱片了。是的,现在我正按照你提到的那样做。但是,如果第一个作业获取了300条记录并发送,那么第二个作业也会获取这300条记录,因为它没有设置为alert_send=0。但还是有一份工作在向那个名单发送邮件