Как динамические задания cron вставляются в расписание cron


Время выполнения ряда основных задач cron Magento, таких как карта сайта, уведомления о предупреждениях о запасах и очистка журналов, можно настроить с помощью конфигурации системы администратора. Это означает, что они не определены внутри узла cronjob модуля config.xml однако они записываются в таблицу cron_schedule, как и другие задания.

Как планировщик cron находит эти задания? Я предполагаю, что во время генерации расписания происходит событие, но я не вижу никаких примеров dispatchEvent в пределах Mage_Cron.

Author: Jonathan Day, 2013-06-17

1 answers

У такого рода cronjob есть внутренняя модель, которая вызывается при вызове настроек cron. Эта модель вставляет время выполнения задания cron в core_config_data, и расписание cron считывает его оттуда.
Давайте возьмем в качестве примера cron карты сайта. Поле "частота" имеет эту базовую модель (см. app/code/code/Mage/Sitemap/etc/system.xml):

<backend_model>adminhtml/system_config_backend_sitemap_cron</backend_model> 

Когда частота сохраняется (и остальные поля вместе с ней), этот метод вызывается: Mage_Adminhtml_Model_System_Config_Backend_Sitemap_Cron::_afterSave().
Это вставляет в таблицу core_config_data выражение cron с этим путем crontab/jobs/sitemap_generate/schedule/cron_expr.
Это значение считывается в Mage_Cron_Model_Observer::_generateJobs и добавляется к cron_schedule

 13
Author: Marius, 2013-06-18 05:44:25