在Magento中设置CRON作业

时间:2011-04-13 03:21:35

标签: magento cron crontab

有很多关于设置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 ,我会看到echo语句的正确输出,并且消息会打印到日志中,所以我知道模型是正确的配置。但是,cron没有相同的结果。如果我手动运行cron.php,我没有错误,但它似乎仍然没有做任何事情。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

据我了解magento的cron系统,它分为两个阶段:

  1. 检查模块config.xml以找出cron必须运行的方法并将它们插入数据库(cron_schedule
  2. 从此表中获取信息并运行与scheduled_at列匹配的方法与实际时间。
  3. 如你所说,cron_schedule表中有条目,第一阶段就可以了 因此,为了检查您的cron是否正常运行,您实际上必须在服务器中设置一个cronjob,如果您在本地工作,这将是您的计算机。
    它在ubuntu上实际上非常简单,我想它在Windows上会更复杂,但是(再次猜测)不是不可能的。
    或者刷新你的浏览器指向你的cron.php文件几次每5分钟(因为你在config.xml中配置)就可以了,但设置一个cronjob会更有效:) /> 希望有助于

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

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

答案 1 :(得分:0)

运行cron脚本的性能和后果可能会有根本区别,具体取决于它是本机调用还是通过Web服务器调用。

一个重要的干扰是当你使用APC操作码cacher for PHP(这是非常好的主意)时。根据文档,从命令行访问PHP将清除缓存,这可能不是你真正希望每5分钟发生一次!

答案 2 :(得分:0)

我知道这已经很久了,但我应该扩大一点。我有点想念,因为在启用APC的情况下从命令行运行PHP会使用它自己的私有缓存。如果您通过Web服务器运行cron作业,则它的现有缓存可用,并添加到。

这将存储从运行到运行的相关内容。将APC与命令行作业一起使用可能是一个障碍,因为您可能正在做的就是加载缓存,然后删除缓存。