【发布时间】:2018-04-03 20:03:38
【问题描述】:
我有一个 CRON 作业,它创建要在数据库中发送的电子邮件。 它会创建大约 3000 封要发送的独特电子邮件。
然后我有一个这样配置的 CRON 作业:
* * * * * php bin/console swiftmailer:spool:send --message-limit=200 --env=prod --no-debug
所以第二个 CRON 作业尝试每分钟发送 200 封电子邮件。 当我看的时候:
ps aux | grep php
它显示多个同步进程 swiftmailer:spool:send。
这些同时调用会导致多次发送同一封电子邮件。 所以今天,即使我的数据库中只有一个条目,一个用户也会收到多封相同的电子邮件。
有人遇到过这个问题吗?
谢谢!
【问题讨论】:
-
如果第一个 cron 调用没有在一分钟内完成会发生什么?
-
发送消息后,您在数据库中设置一个标志,以便其他 cron 进程不再发送相同的消息?
-
@madalinivascu :您的第一条评论记得我选项--time-limit。也许 --time-limit=55 可以解决我的问题。
-
@madalinivascu:我不管理数据库中的标志,swiftmailer:spool:send 自己管理他。它将其 mail.status 更改为 1 (pending_send) 到 3 (sent)。
-
您需要增加通话之间的时间,以便发送所有邮件并更新标志,如果工作时间超过 1 分钟,则未为某些电子邮件设置标志,因此您的服务器再次发送他们相信电子邮件没有发送
标签: php symfony cron swiftmailer spool