我正在尝试编写一个cronjob控制器,所以我可以调用一个网站并执行所有模块cronjob.php.现在我的问题是我该怎么做?
卷曲是一种选择,所以我也可以计算错误和成功吗?
[更新]
我想我还没有解释得够.
我想要做的是有一个文件,我可以从http:// server/cronjob调用,然后让它执行每个/application/modules/*/controller/CronjobController.php或者有另一种方法这样做所有的cronjobs不在一个地方,而是在模块所在的同一个地方.这将为我提供优势,如果模块不存在,它不会尝试运行其cronjob.
现在我的问题是你将如何执行CronjobController的所有模块,或者你会以完全不同的方式执行它,因此它仍然保持模块化?
我希望能够分发出多少cronjobs成功运行,有多少没有
经过一些研究和拖延很多我得出了一个简单的结论:ZF-ized cron脚本应该包含你zend框架应用程序的所有功能 - 没有所有视图的东西.我通过在我的应用程序目录中创建一个新的cronjobfoo.php文件来完成此操作.然后我从以下方面采取了最低限度:-my前端控制器(index.php)-my bootstrap.php
我拿出所有视图的东西,专注于保持环境设置,数据库设置,自动加载器和注册表设置.我不得不花一点时间来纠正文档根变量并删除从我的引导程序复制的一些OO功能.
之后,我只是编码了..在我的情况下,它正在编译并通过电子邮件发送夜间报告.使用Zend_Mail非常棒.当我确信我的脚本按照我想要的方式工作时,我只是添加了我的crontab.
祝好运!
对于Zend Framework,我目前正在使用下面概述的代码.该脚本仅包含门户文件index.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
我会提醒你的cronjobs可以向公众开放,因为它们可以在正常时间之外被触发,并且取决于它们的作用,会导致问题(我知道这不是你想要的,但是把它们放到一个实际的控制器中就可以到达了来自浏览器).例如,我有一个发送电子邮件的cron.如果有人找到了cron URL并且刚刚开始点击它,我会不断发送垃圾邮件.
我做的是创建一个cron文件夹,并在那里创建了一个heartbeat.php,它为我引导了Zend Framework(减去MVC).它检查一个数据库,该数据库包含所有已安装的cron作业的列表,如果是时候运行它们,则生成一个cron作业类的实例并运行它.
cron作业只是来自抽象cron类的子类,它具有install(),run(),deactivate()等方法.
为了解雇我的工作,我只有一个简单的crontab条目,每隔5分钟就会运行一次,命中heartbeat.php.到目前为止,它在两个不同的网站上都很棒.