Как настроить работу cron в модуле Magento?
Я хотел настроить работу cron внутри моего модуля. Я выполнил инструкции по wiki Magento - 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 Scheduler, который показывает мое задание cron, но когда я пытаюсь "запустить сейчас" (для отладки), я получаю ошибку -
Недействительный обратный вызов: roomstory_invoice/setstatus:: run не существует
Это что-то простое, после долгих попыток, я все еще не могу найти ошибку. Скажите, пожалуйста, другой способ сделать это или указать ошибку в этом коде.
Спасибо!
Ответы
Ответ 1
В ваших модулях 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!");
}
}
Убедитесь, что ведение журнала включено и оно должно работать, проверьте журнал, чтобы убедиться;)
Ответ 2
Обязательно добавьте файл Magento cron.sh в crontab
crontab -e
*/5 * * * * /bin/sh /path-to-magento/cron.sh
Ответ 3
<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()
{
}
}
Ответ 4
Вы можете легко создать модуль для задания 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.php в разделе заданий cron
по умолчанию вы можете установить путь как php -f /home/mercodec/public_html/cron.php
в magento.
Ответ 5
до этого вам нужно запустить этот script в вашем терминале.
Для ubuntu: */1 * * * */usr/bin/php/var/www/html/modulename/cron.php > /dev/null