Php 作业队列-cron可以工作吗?

Php 作业队列-cron可以工作吗?,php,architecture,queue,Php,Architecture,Queue,我正在开发一个小应用程序,需要人们通过电子邮件上传图像。它是在PHP(无框架)中使用MySQL和S3构建的 到目前为止,在我的场景中:电子邮件存储在POP3帐户上。脚本每分钟运行一次,获取最早的电子邮件,调整图像大小,将其上载到S3,将其路径存储在数据库中,删除电子邮件 在更大范围内,这将如何管理?cron作业是处理这种情况的最佳方法吗?如果这个过程需要一分钟以上的时间怎么办:它将重叠并最终失败,对吗?或者如果不到一分钟怎么办?考虑到我在更大范围内每小时会有60多个请求,我会得到不必要的空闲时间

我正在开发一个小应用程序,需要人们通过电子邮件上传图像。它是在PHP(无框架)中使用MySQL和S3构建的

到目前为止,在我的场景中:电子邮件存储在POP3帐户上。脚本每分钟运行一次,获取最早的电子邮件,调整图像大小,将其上载到S3,将其路径存储在数据库中,删除电子邮件

在更大范围内,这将如何管理?cron作业是处理这种情况的最佳方法吗?如果这个过程需要一分钟以上的时间怎么办:它将重叠并最终失败,对吗?或者如果不到一分钟怎么办?考虑到我在更大范围内每小时会有60多个请求,我会得到不必要的空闲时间

也许我应该使用一个.forward文件来处理电子邮件,但我还是不能控制流量

我相信这些场景中的大多数都是可行的,我只是对最佳实践感到好奇


谢谢

尝试使用长时间运行的流程。它检查邮件,并处理所有邮件。如果完成后它找不到更多的邮件,那么它会休眠一分钟


如果您在稳定性方面有问题,您可以始终使用类似的方法。

尝试使用长时间运行的流程。它检查邮件,并处理所有邮件。如果完成后它找不到更多的邮件,那么它会休眠一分钟


如果您在稳定性方面有问题,您可以始终使用类似的方法。

稍微修改的方法可以是:

  • 每分钟从cron运行一次脚本
  • 您的脚本检查它的另一个实例是否已在运行,以及该实例是否存在
  • 正在运行的脚本将处理剩余队列,直到该队列为空或包含多个元素(例如,最大值为10)
我曾经有一个备份过程,如果上一次完成的备份时间超过了某个时间段,则每小时备份一次客户目录。这非常有效,直到一些客户有太多Gb的数据,并且脚本需要一个多小时才能完成备份

如果没有检查,下一个小时脚本将再次运行同一个客户,这也需要一个多小时,以此类推,直到机器以非常高的运行级别变得无响应


我实现的修复是所描述的检查,如果另一个实例正在运行,只需退出并等待下一个周期。在那次修复之后,我好几年都没有遇到过问题。

稍微修改一下的方法可能是:

  • 每分钟从cron运行一次脚本
  • 您的脚本检查它的另一个实例是否已在运行,以及该实例是否存在
  • 正在运行的脚本将处理剩余队列,直到该队列为空或包含多个元素(例如,最大值为10)
我曾经有一个备份过程,如果上一次完成的备份时间超过了某个时间段,则每小时备份一次客户目录。这非常有效,直到一些客户有太多Gb的数据,并且脚本需要一个多小时才能完成备份

如果没有检查,下一个小时脚本将再次运行同一个客户,这也需要一个多小时,以此类推,直到机器以非常高的运行级别变得无响应

我实现的修复是所描述的检查,如果另一个实例正在运行,只需退出并等待下一个周期。在那次修复之后,我好几年都没有遇到过问题