0

在我的一个 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 作业将开始并开始发送邮件。最终用户将相应地收到两次或三次邮件。

IE。如果循环包含 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 并开始新的?

提前致谢

4

1 回答 1

0

每次 cronjob 启动时,您都可以终止正在运行的 cronjob

像这样的名字:

pkill process-name

或通过 id 像这样:

kill 1234

你也可以看看这个使用 php 代码的博客:

http://abhinavsingh.com/blog/2009/12/how-to-use-locks-in-php-cron-jobs-to-avoid-cron-overlaps/

于 2013-07-18T08:18:10.643 回答