Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-MySQL cronjob发送邮件循环重复_Php_Mysql_Amazon Web Services_Cron_Cron Task - Fatal编程技术网

PHP-MySQL cronjob发送邮件循环重复

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

在我的一个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 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。但还是有一份工作在向那个名单发送邮件