Основи роботи планувальника завдань (cron) в Мадженто

У сьогоднішньому пості ми коротко розглянемо роботу Cron в Мадженто.

 

Основи

Система Cron в Magento використовується для виконання завдань на постійній основі і за розкладом. Основним файлом для запуску планувальника завдань є файл cron.php в кореневій папці Magento-сайту. Щоб запустити Cron, вам потрібно поставити цей файл в завдання планувальника на веб-сервері. І налаштувати частоту його запуску.

 

Рекомендується встановлювати cron для Magento, оскільки з його допомогою двигун вирішує різні завдання: наприклад, робить очистку логів, розсилає інформаційні бюлетені, розсилає на пошту повідомлення про нові замовлення і т.п.

 

 

Як додати Cron для користувацького модуля

Щоб додати cron завдання в свій модуль, додайте відповідні xml-інструкції в файл config.xml модуля:

 

<default>   <crontab>    <jobs>     <job_unique_name>      <schedule>       <cron_expr>*/15 * * * *</cron_expr>      </schedule>      <run>       <model>module/observer::cronMethod</model>      </run>     </job_unique_name>    </jobs>   </crontab>  </default>  

 

  • job_unique_name – будь-яке унікальне ім’я для завдання
  • cron_expr – тут вказується будь-який допустимий вираз cron (частота)
  • module/observer – діюча Модель у модулі
  • cronMethod – це функція всередині цієї Моделі

 

У прикладі ми використовуємо вираз */15 * * * * для ноду cron_expr. Він означає, що cron потрібно запускати кожні 15 хвилин. Це цілком нормальний розклад, менші значення можуть не підтримувати деякі сервери.

Спостерігач (observer): у спостерігачі ми викликаємо метод (функцію), яким управлятиме cron.

Приклад обсервера:

 

class Sebweo_Test_Model_Observer  {    public function cronMethod() {      // do something    }  }  

 



 

Налаштування для cron задаються в адмінпанелі за адресою: Система -> Конфігурація -> Розширена -> Система -> Cron

Статус всіх завдань cron Magento зберігає в таблиці cron_schedule бази даних. Ця інформація може вам стати в нагоді при налагодженні роботи cron.

УВАГА: Якщо будь-яке із завдань cron налаштовано з помилкою, всі інші завдання cron також не виконуватимуться, оскільки всі вони виконуються по черзі.

 

 

Робота Magento Cron в деталях

Тепер давайте заглянемо в вихідний код Magento і подивимося, як виконується cron.

 

Файли для розгляду:

  1. cron.php
  2. Mage_Cron_Model_Observer
  3. app/code/core/Mage/Cron/etc/config.xml

 

Початковою точкою є файл cron.php в корені сайту. Тут ми бачимо:

………..  Mage::getConfig()->init()->loadEventObservers('crontab');  Mage::app()->addEventArea('crontab');  Mage::dispatchEvent('always');  Mage::dispatchEvent('default');  ………..  

 

Тому Magento завантажує спочатку всі Обсервери з області crontab, а потім робить диспетчеризацію подій «always» і «default».

Обидві ці події визначені у файлі app/code/core/Mage/Cron/etc/config.xml

 

<crontab>   <events>    <default>     <observers>      <cron_observer>        <class>cron/observer</class>        <method>dispatch</method>      </cron_observer>     </observers>    </default>    <always>     <observers>      <cron_observer>        <class>cron/observer</class>        <method>dispatchAlways</method>      </cron_observer>     </observers>    </always>   </events>  </crontab>  

 

 

Це всього лише один невеликий приклад використання cron. Існує безліч можливостей для внесення змін і поліпшень під свої потреби. І вам допоможе в цьому інформація про те, як це працює.