Вопрос по php, xml, magento – Как настроить работу cron в модуле Magento?

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>

И это мой класс. (Приложение / код / местные / Roomstory / счета / модель / Setstatus.php)

<?php
class Roomstory_Invoice_Model_Setstatus {

  public function run() {
    return true;
  }

}
?>

Я установил модуль планировщика Cron, в котором отображается мое задание cron, но когда я пытаюсь «запустить сейчас», (для отладки), я получаю ошибку -

Invalid callback: roomstory_invoice/setstatus::run does not exist

Это что-то простое, после долгих попыток я все еще не могу найти ошибку. Пожалуйста, сообщите какой-нибудь другой способ сделать это или укажите ошибку в этом коде.

Спасибо!

Ваш Ответ

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!");
    }
}

Убедитесь, что регистрация включена и она должна работать, проверьте журнал, чтобы быть уверенным;)

Я обновил config.xml, пожалуйста, попробуйте еще раз;)
Я все еще получаю ту же ошибкуInvalid callback: roomstoryinvoicecron/observer::setStatus does not exist Vinayak Garg
Здравствуйте, я пытался использовать тот же код, но он не работает для меня. Можете ли вы сказать мне, что еще нужно установить отдельно от конфига и наблюдателя?
спасибо это помогло мне
Спасибо, теперь это работает! Vinayak Garg
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
   }
}

Теперь последний шаг: перейдите на панель хостинга, укажите путь и время выполнения файла cron.php в разделе работы cron.

по умолчанию вы можете установить путь какphp -f /home/mercodec/public_html/cron.php в пурпурном.

8

Обязательно добавьте Magento cron.sh файл в crontab

crontab -e

*/5 * * * * /bin/sh /path-to-magento/cron.sh
0

перед этим вы должны запустить этот скрипт в вашем терминале. Для Ubuntu: * / 1 * * * * / usr / bin / php /var/www/html/modulename/cron.php & gt; / DEV / нуль

Спасибо за Ваш ответ
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()
   { 

   }
}

Похожие вопросы