0

我已经设置了一个 cron 作业(PHP 脚本),它执行以下工作:

1. Read all of the unseen emails, using imap
   1.1  For each email readed
   1.2. Fetches the details and save detail in database
   1.3. Moves email to other mailbox named "Processed"
   1.4. Goto step 1.1

但是如果 PHP 脚本停止或执行失败,在步骤 1.2 之后但在 1.3 之前,电子邮件将被重新处理,这就是这里的问题

众所周知,处理时间取决于服务器负载和要处理的电子邮件数量等许多因素,所以我认为设置 max_execution_time 不会有帮助。

我如何使这个原子?有任何想法吗?(如果您对不同的流程有任何想法,我也可以更改流程)。

编辑:假设电子邮件移动了,它只是要提交,但是 PHP 脚本停止了?然后会发生的是,电子邮件会在没有存储记录的情况下移动。

4

1 回答 1

0

您可以将步骤 1.2 放入数据库事务中,然后如果步骤 1.3 失败,您将回滚该事务。

如果您有一个事务,并且没有显式调用“提交”(即通过超时,或者您只是忘记调用提交),那么它会自动假定为回滚。

于 2012-10-12T17:51:15.040 回答