在我的一个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个数据并发送电子邮件。假设发送邮件120 10分钟。
Cron B将于12:10开始并从120 - 500获取数据。这也将发送邮件。
通过这个结果,第121位用户将收到来自Cron A和Cron B的邮件。
我试过限制查询次数。但问题是我们无法预测每个循环何时结束。即有时发送邮件需要4,2,5,6或10秒。
有没有办法避免这种重复?有没有办法杀死现有的cronjob并启动新的?
提前致谢
答案 0 :(得分: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/