【问题标题】:Scheduled tasks (cronjob-aternative) with Zend framework?Zend 框架的计划任务(cron 作业替代)?
【发布时间】:2013-03-06 09:39:43
【问题描述】:

我有一个用 PHP(Zend 框架)编写的 web 应用程序,我想每隔一段时间执行一个(几个)脚本。例如一天一次。我知道这可以通过使用 crontab 和 cronjobs 来完成,但并非所有的托管服务提供商都提供这些服务。因此,我正在寻找不使用 Cronjob 的解决方案。

你如何解决这个问题? 有哪些可能性?

【问题讨论】:

  • 看看是否有替代方案会很有趣,但据我所知没有。
  • Zend Server(商业版)有一个Job Queue,可以做重复的任务。

标签: zend-framework crontab


【解决方案1】:

Cron 作业实际上只提供一些基本好处:调度、执行和日志记录。这些都是很容易在 PHP 应用程序中复制的东西......

第一步:创建任务表

你需要存储:

  1. 执行频率
  2. 要执行的内容(包括文件、回调、评估代码等)
  3. 计算下一次运行日期
  4. 存储以前的运行日期

第二步:执行

对于如何实际触发任务,您有几种选择:

  1. 在每个页面运行时调用 PHP 生成的空白 GIF 图像,这会触发 cron 代码。
  2. 调用运行 cron 代码的 AJAX 脚本
  3. 在您的应用程序中正常调用它(可能会降低执行速度)

无论它如何启动,都会触发实际的 cron 代码,它决定是否有任何任务要运行,以及要运行哪些。

第三步:记录

这个应该很简单。只需将任务期间发生的事情记录到一个文件中,然后您可以阅读该文件以确保其正常工作。

...

在运行任务之前,您需要更新之前的运行日期,在运行任务之后,您需要根据其频率设置下一次运行日期。这种方法的唯一后备是当没有人访问站点时,在下一个访问者到来之前不会执行任何 cron 作业。

【讨论】:

  • 是的,这就是我要建议的方向,但阿德里安比我想的要清楚得多。
  • +0 正如您在第 2 步中所展示的,只有在触发了一些相当不可预测的外部事件时才会执行。因此,只有当您知道您的网站有源源不断的访问者时,此解决方案才实用。 CRON 作业在它应该运行的时候运行。
  • 这似乎是正确的方向 :-) 非常感谢您的选择!由于应用程序可能会变慢,因此执行选项 3 确实是不可能的。
  • @Gordon,你会建议什么不依赖于环境?显然,一个真正的 cron 任务很重要,但是当这不是一个选项时,这不是一个糟糕的选择。
  • 在缺乏真正的 Cron 或 JobQueue 的情况下,我可能会选择您的混合解决方案和 ArneRie 下面的解决方案,例如使用能够以可靠的时间间隔在我的机器上触发作业的服务。
【解决方案2】:

您可以使用这样的服务:

CronLess

将您的脚本配置为可从外部访问,并让该服务调用该 url。为了安全起见,您可以使用某种令牌保护脚本。

【讨论】:

  • 我们希望将它包含在应用程序本身中,因此如果服务停止,我们的应用程序仍然可以使用。不过感谢您的建议:-)
  • 你不需要这样的服务。
【解决方案3】:
【解决方案4】:

我做过类似的@Adrian Schneider 解决方案。如果您想为您的应用程序添加更多一致性,您可以添加一个接口 Cronable,强制实现它的类添加一个 cron() 函数,该函数将处理 cron 的内部逻辑,有时会有所不同。所有这些都可以通过 cron 包装器以类似的方式包装和调用,这将是系统中 cron 调用的唯一脚本,它将决定当前要执行的 PHP cron 作业是什么。你可以在我的here回复中了解更多细节。

【讨论】:

    【解决方案5】:

    我同意 Arne 的回答,但是如果您已经在使用 zend 框架,您应该使用内置的 Zend_Queue 来实现您的解决方案,这实际上是为此完成的。 要查看如何在此处实现,请参阅其他问题的链接,该问题描述了如何设置您的基础架构。 Infrastructure for Running your Zend Queue Receiver

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2012-08-31
      • 2023-01-27
      • 2012-06-03
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多