使用Zend Framework创建cronjob

我正在尝试编写一个cronjob控制器,所以我可以调用一个网站并执行所有模块cronjob.php。现在我的问题是我该怎么做?

curl是一种选择,所以我也可以计算错误和成功吗?

[更新]

我想我还没有解释得足够多。

我想做的是有一个文件,我可以像从 http://server/cronjob 调用,然后让它执行每个/application/modules/*/controller/CronjobController.php或者有另一种方法可以做到这一点,这样所有的cronjobs不在一个地方,而是在模块所在的同一个地方。这将为我提供优势,如果一个模块不存在,它不会尝试运行其cronjob。

现在我的问题是,您将如何执行所有模块CronjobController,还是以完全不同的方式执行它,以便它仍然保持模块化?

我希望能够分发出有多少cronjobs成功运行,有多少没有成功运行


答案 1

经过一些研究和大量的拖延,我得出了一个简单的结论,即ZF化的cron脚本应该包含你zend框架应用程序的所有功能 - 没有所有的视图内容。我通过在应用程序目录中创建一个新的cronjobfoo.php文件来实现这一点。然后我从以下位置获取了最低限度:-my front controller (index.php) -my bootstrap.php

我拿出了所有的视图内容,并专注于保留环境设置,数据库设置,自动加载器和注册表设置。我不得不花一点时间来纠正文档根变量,并删除从我的引导程序复制的一些OO功能。

在那之后,我只是编码了。在我的情况下,它是编译和通过电子邮件发送夜间报告。使用Zend_Mail真是太好了。当我确信我的脚本正在按照我想要的方式工作时,我只是把它添加到我的crontab中。

祝你好运!


答案 2

对于Zend框架,我目前正在使用下面概述的代码。该脚本仅包含门户文件索引.php,其中所有路径、环境和其他 Zendy 代码都已引导。通过在cron脚本中定义一个常量,我们取消了运行应用程序的最后一步。

这意味着应用程序只是设置,甚至没有引导。在这一点上,我们开始引导我们需要的资源,那就是

//public/index.php

if(!defined('DONT_RUN_APP') || DONT_RUN_APP == false) {  
    $application->bootstrap()->run();
}

// application/../cron/cronjob.php

define("DONT_RUN_APP",true);
require(realpath('/srv/www/project/public/index.php'));
$application->bootstrap('config');
$application->bootstrap('db');

//cron code follows

推荐