我需要在php / mysql中编写自己的电子邮件调度程序。我正在使用亚马逊的SES发送电子邮件。我在“队列”MySQL表中记录了谁和什么需要通过电子邮件发送的记录。成功发送电子邮件后,每条记录都会被删除。我想尽快发送这些电子邮件,但我需要记住亚马逊的配额。他们限制您允许的电子邮件发送/秒。
我如何安排这个不超过限制?我知道我可以编写一个php cron脚本,它只会从队列中提取X个记录并发送它们,但是如果我的cron每分钟只运行一次,那就浪费了很多时间。 (X是配额限制/秒)
另一方面,如果我的电子邮件配额受到冲击,我可以发送1000 /秒(或者荒谬的东西),如果我的脚本需要很长时间才能执行,我可能会遇到问题。 cron可能会再次触发并从Queue表中提取相同的记录。
答案 0 :(得分:2)
执行脚本时应创建锁定文件,并在执行完成后将其删除。然后,如果脚本再次运行而没有完成先前的执行,您可以提醒自己。
$filename = 'sending_emails.txt';
if (file_exists($filename)) {
mail('your@email.com', 'Execution overlap', 'Adjust script parameters!');
exit;
}
file_put_contents('sending_emails.txt', '1');
// Send e-mail logic here
unlink($filename);