Zend框架的预定任务(cron job-alternative)?

时间:2010-11-22 17:31:43

标签: zend-framework crontab

我有一个用PHP编写的Web应用程序(Zend Framework),我想偶尔执行一些(少数)脚本。例如每天一次。我知道这可以通过使用crontab和cronjobs完成,但并非所有托管提供商都有这些可用。因此,我正在寻找一种不使用Cronjob的解决方案。

你是如何解决这个问题的? 有什么可能性?

5 个答案:

答案 0 :(得分:4)

您可以使用以下服务:

CronLess

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

答案 1 :(得分:4)

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

第一步:创建任务表

你需要存储:

  1. 执行频率
  2. 执行什么(包括文件,回调,评估代码等)
  3. 计算下一个运行日期
  4. 存储以前的运行日期
  5. 第二步:执行

    您可以选择如何实际触发任务:

    1. 在每次运行的页面上调用PHP生成的空白GIF图像,这会触发cron代码。
    2. 调用运行cron代码的AJAX脚本
    3. 在您的应用程序中正常调用它(可能会减慢执行速度)
    4. 无论它如何启动,它都会触发实际的cron代码,该代码决定是否有任何要运行的任务以及要运行的任务。

      第三步:记录

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

      ...

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

答案 2 :(得分:1)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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