【发布时间】:2013-07-17 01:34:06
【问题描述】:
在我的一个 Web 应用程序中,我通过 AMAZON SES 使用 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 并开始新的?
提前致谢
【问题讨论】:
-
一旦电子邮件发送到此记录,您可以将记录列 alert_send 从 0 更新为 1。这样第二个 cronjob 将不会获取此记录。
-
是的,现在我正在按照你提到的那样做。但是如果第一个作业获取 300 条记录并发送,第二个作业也获取这 300 条记录,因为它没有设置为 alert_send=0。但仍然是工作 A 向该列表发送邮件
标签: php mysql amazon-web-services cron cron-task