17

我想在我的模块中设置一个 cron 作业。我按照 Magento wiki - how_to_setup_a_cron_job上的说明进行操作,但我的 cron 作业根本没有执行。

这是我的 config.xml (app/code/local/Roomstory/Invoice/etc/config.xml)

<?xml version="1.0"?>
<config>    
    <modules>
        <Roomstory_Invoice>
            <version>0.1.1</version>
        </Roomstory_Invoice>
    </modules>
<!-- -->
    <crontab>
        <jobs>
            <roomstoryinvoice_setstatus>
                <schedule><cron_expr>*/10 * * * *</cron_expr></schedule>
                <run><model>roomstory_invoice/setstatus::run</model></run>
            </roomstoryinvoice_setstatus>
        </jobs>
    </crontab>
</config>

这是我的课。(app/code/local/Roomstory/Invoice/Model/Setstatus.php)

<?php
class Roomstory_Invoice_Model_Setstatus {

  public function run() {
    return true;
  }

}
?>

我已经安装了一个 Cron 调度程序模块,它显示了我的 cron 作业列出,但是当我尝试“立即运行”(用于调试)时,我收到错误 -

无效回调:roomstory_invoice/setstatus::run 不存在

这很简单,经过多次尝试,我仍然无法找到错误。请告诉其他一些方法,或在此代码中指出错误。

谢谢!

4

5 回答 5

34

在您的模块config.xml中放置以下内容:

<config>
    <global>
        <models>
            <roomstoryinvoicecron>
                <class>Roomstory_Invoice_Model</class>
            </roomstoryinvoicecron>                         
        </models>
    </global>
    <crontab>
        <jobs>
            <roomstoryinvoicecron>
                <schedule>
                    <cron_expr>*/10 * * * *</cron_expr>
                </schedule>
                <run>
                    <model>roomstoryinvoicecron/observer::setStatus</model>
                </run>
            </roomstoryinvoicecron>
        </jobs>
    </crontab>
</config>

添加app/code/local/Roomstory/Invoice/Model/Observer.php以下内容:

<?php
class Roomstory_Invoice_Model_Observer {
    public function setStatus() {
        Mage::log("WORKS!");
    }
}

确保启用了日志记录并且它应该可以工作,请检查日志以确保;)

于 2012-06-26T07:35:52.323 回答
8

请务必在 crontab 中添加 Magento cron.sh 文件

crontab -e

*/5 * * * * /bin/sh /path-to-magento/cron.sh
于 2014-01-14T19:54:06.840 回答
2
 <crontab>
        <jobs>
            <CompanyName_ModuleName>
                <schedule>
                    <cron_expr>*/5 * * * *</cron_expr>
                </schedule>
                <run>
                    <model>ModuleName/observer::setStatus</model>
                </run>
            </CompanyName_ModuleName>
        </jobs>
    </crontab>

并在模型中创建 Observer.php 文件

    class CompanyName_ModuleName_Model_Observer extends Mage_Core_Model_Abstract
{

   public function setStatus()
   { 

   }
}
于 2012-06-26T08:08:40.303 回答
1

您可以轻松地为 cron 作业创建模块,只需按照以下步骤操作:

创建 Config.xml 文件并在其中设置 cron 作业。

<?xml version="1.0"?>
<config>    
<crontab>
        <jobs>
            <Namespace_Module>
                <schedule>
                    <cron_expr>* * * * *</cron_expr>
                </schedule>
                <run>
                    <model>module/observer::method</model>
                </run>
            </Namespace_Module>
        </jobs>
    </crontab>
</config>

你的观察者方法:

  class CompanyName_ModuleName_Model_Observer extends Mage_Core_Model_Abstract
{

   public function setStatus()
   { 
//your action
   }
}

现在最后一步转到您的托管 cpanel 并在 cron 作业部分设置 cron.php 文件的路径和运行时间

php -f /home/mercodec/public_html/cron.php默认情况下,您可以像在 magento 中一样设置路径。

于 2014-10-06T05:20:08.170 回答
0

在此之前,您必须在终端中运行此脚本。对于 ubuntu:*/1 * * * * /usr/bin/php /var/www/html/modulename/cron.php > /dev/null

于 2015-12-31T13:02:22.463 回答