Как динамические задания cron вставляются в расписание cron
Время выполнения ряда основных задач cron Magento, таких как карта сайта, уведомления о предупреждениях о запасах и очистка журналов, можно настроить с помощью конфигурации системы администратора. Это означает, что они не определены внутри узла cronjob
модуля config.xml однако они записываются в таблицу cron_schedule
, как и другие задания.
Как планировщик cron находит эти задания? Я предполагаю, что во время генерации расписания происходит событие, но я не вижу никаких примеров dispatchEvent
в пределах Mage_Cron.
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