作业队列-将一个cron工作


Job queue - would a cron work?

我正在构建一个需要人们通过电子邮件上传图像的小应用程序。它是建立在PHP(没有框架)与MySQL和S3。

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

在更大的范围内,这将如何管理?cron工作是处理这种情况的最佳方式吗?如果这个过程超过一分钟:它会重叠,最终失败,对吗?或者如果不到一分钟呢?考虑到在更大的规模下,我每小时将有超过60个请求,我将获得不必要的空闲时间…

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

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

谢谢!

稍作修改的方法是:

  • 每分钟从cron运行你的脚本
  • 你的脚本检查它的另一个实例是否已经在运行,如果是的话,只是存在
  • 正在运行的脚本处理剩余的队列,直到为空或多个元素(例如max 10)

我曾经有一个备份过程,如果最后一次完成的备份超过一定时间,则每小时备份一次客户目录。这个方法非常有效,直到一些客户的数据Gb太多,脚本需要一个多小时才能完成备份。

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

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

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

如果你在稳定性方面有问题,你总是可以使用像supervise这样的东西。