2011-04-13 145 views
1

有很多关于设置cron的教程,我想我已经做得正确,但由于某种原因,它无法正常工作。我还创建了一个控制器类来测试模型,并且它正常工作。在Magento中设置CRON作业

这里是我的config.xml:

<config> 
    <modules> 
     <VPS_Export> 
      <version>0.1.0</version> 
     </VPS_Export> 
    </modules> 
    <global> 
     <models> 
      <vps_export> 
       <class>VPS_Export_Model</class> 
      </vps_export> 
     </models> 
     <helpers> 
      <vps_export> 
       <class>VPS_Export_Helper</class> 
      </vps_export> 
     </helpers> 
    </global> 
<frontend> 
    <routers> 
     <vps_export> 
      <use>standard</use> 
      <args> 
       <module>VPS_Export</module> 
       <frontName>vpsexport</frontName> 
      </args> 
     </vps_export> 
    </routers> 
</frontend> 
    <crontab> 
     <jobs> 
      <vps_export> 
       <schedule> 
        <cron_expr>*/5 * * * *</cron_expr><!-- every 5 minutes --> 
       </schedule> 
       <run> 
        <model>vps_export/observer::exportProducts</model> 
       </run> 
      </vps_export> 
     </jobs> 
    </crontab> 
</config> 

我Observer.php文件是:

<?php 
class VPS_Export_Model_Observer 
{ 
    public function exportProducts() 
    { 
     echo "VPS Export Products called!"; 
     Mage::Log("exportProducts called!"); 
    } 
} 
?> 

而且我的测试IndexController.php文件是:

<?php 
class VPS_Export_IndexController extends Mage_Core_Controller_Front_Action 
{ 
    public function indexAction() 
    { 
     echo "index action called!"; 
     Mage::getModel('vps_export/observer')->exportProducts(); 
    } 
} 
?> 

如果我点我的浏览器在http:// my_server/vpsexport/index我看到从t他回应声明并将消息打印到日志中,所以我知道该模型已正确配置。但是,cron并没有得到相同的结果。如果我手动运行cron.php,我没有遇到任何错误,但它仍然没有做任何事情。

有什么想法?

+0

手动运行cron后,你的db中的'cron_schedule'表中有什么东西吗? – OSdave 2011-04-13 07:54:56

+0

我以前不知道cron_schedule表。是的,表中有项目,它们似乎正在执行,但我的日志消息仍然没有记录到日志中。我如何测试以确保它在执行cron作业时确实调用了正确的函数? – BrianVPS 2011-04-13 12:10:24

回答

4

据我了解Magento的cron的系统,它工作在2阶段:

  1. 它检查模块config.xml中找出哪些必须由cron运行的方法,并将其插入到数据库(cron_schedule
  2. 它从此表中获取信息并运行与实际时间匹配的scheduled_at列的方法。

正如你所说,我们在您cron_schedule表项,第一阶段是确定
因此,为了检查你的cron执行罚款,你居然要建立在你的服务器一个cronjob,这将是你的电脑,如果你在本地工作。
在ubuntu上它实际上很简单,我猜它在Windows上会更复杂,但是(再次猜测)不可行。
或者也许刷新你的浏览器指向你的cron.php文件几分钟会每隔5分钟(因为你有它在config.xml中配置)会做的伎俩,但设置一个cronjob会更有效:)
希望帮助

编辑:这里为啥子我的cronjob看起来像,如果它可以帮助你:

*/5 * * * * wget -q http://magento.local/cron.php 
+0

谢谢@ david-parloir。我应该提到过这个,但我已经将它添加到我的Ubuntu服务器上的crontab。我添加了以下行: '*/5 * * * * www-data/usr/bin/php/var/www/vps_local_5/cron.php'。这看起来不错吗?我也尝试刷新我的浏览器指向cron.php,但它从不在日志中放入任何东西。它可能正在运行cron工作,但我无法确认... – BrianVPS 2011-04-13 14:15:21

+0

我编辑了我的答案,包括我的cronjob:它看起来与您的不同... – OSdave 2011-04-13 14:31:12

+0

谢谢@ david-parloir,但是我仍然有麻烦。你的crontab使用调用cron.php的wget版本,但它基本上是一样的。这不是问题。 cron.php被称为...如果不是,则条目不会进入数据库。 cron_schedule表包含我期望的条目,并且他们声称成功执行,但没有发现我的日志消息,也没有发生任何预期的结果。我错过了什么? – BrianVPS 2011-04-15 03:27:16

0

可以有来表现有着根本的区别和后果你是如何运行的cron脚本取决于它是本地调用还是通过Web服务器调用。

一个重要的缺点是当你使用PHP的APC操作码cacher(这是一个真的好主意)。根据文档,从命令行访问PHP会清除缓存,这可能不是你真正想每5分钟发生一次的事情!

+0

感谢您的回复!我注意到最近可能与缓存刷新有关的问题。你能否详细说明从命令行访问PHP时的缓存刷新问题?你指的是什么文件? – BrianVPS 2012-04-16 20:16:26

+0

@BrianVPS,你是否证实APC实际上做到了这一点?你有没有找到说明文件? – Gaia 2013-02-05 10:38:13

+0

不,我没有看过APC或做过任何更多的事情。我真的不记得当我遇到这个问题时我正在做什么,但现在cron似乎正在为我工​​作。 – BrianVPS 2013-02-12 21:08:49

0

我知道这是年龄稍后,但我应该扩大一点。我排序错误,因为在启用APC的情况下从命令行运行PHP使用它自己的私有缓存。如果您通过Web服务器运行cron作业,则它现有的缓存可用并添加到该缓存。

这将存储从运行相关的东西运行。在命令行工作中使用APC可能是一个障碍,因为您可能要做的只是加载缓存,然后放下它。