Wie werden dynamische Cronjobs in cron_schedule eingefügt?

7

Das Timing für eine Reihe von Kernaufgaben von Magento wie Sitemap, Benachrichtigungen über Lageralarme und Protokollbereinigung kann über die Systemkonfiguration des Administrators angepasst werden. Dies bedeutet, dass sie nicht im cronjobKnoten der config.xml eines Moduls definiert sind, sondern cron_schedulewie andere Jobs in die Tabelle geschrieben werden .

Wie findet der Cron-Scheduler diese Jobs? Ich vermute, dass während der Zeitplanerstellung ein Ereignis ausgelöst wird, aber ich kann keine Instanzen dispatchEventin Mage_Cron sehen.

Jonathan Day
quelle

Antworten:

13

Diese Art von Cronjobs haben ein Backend-Modell, das aufgerufen wird, wenn die Cron-Einstellungen aufgerufen werden. Dieses Modell fügt die Cron-Job-Laufzeit ein core_config_dataund der Cron-Zeitplan liest sie von dort aus.
Nehmen wir als Beispiel die Sitemap Cron. Das Feld 'Frequenz' hat dieses Backend-Modell (siehe app/code/code/Mage/Sitemap/etc/system.xml):

<backend_model>adminhtml/system_config_backend_sitemap_cron</backend_model> 

Wenn die Frequenz gespeichert wird (und die restlichen Felder damit), wird diese Methode aufgerufen : Mage_Adminhtml_Model_System_Config_Backend_Sitemap_Cron::_afterSave().
Dadurch wird core_config_datader Cron-Ausdruck mit diesem Pfad in die Tabelle eingefügt crontab/jobs/sitemap_generate/schedule/cron_expr.
Dieser Wert wird eingelesen Mage_Cron_Model_Observer::_generateJobsund dem hinzugefügtcron_schedule

Marius
quelle