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 に答える