動的cronjobはどのようにcron_scheduleに挿入されますか


7

サイトマップ、在庫アラート通知、ログのクリーニングなど、Magentoのコアcronタスクのタイミングは、管理者のシステム構成を介して調整できます。つまり、これらはcronjobモジュールのconfig.xmlのノード内で定義されていませんが、cron_schedule他のジョブと同様にテーブルに書き込まれます。

cronスケジューラはこれらのジョブをどのようにして見つけますか?私の推測では、スケジュールの生成中にスローされたイベントがあるのですが、dispatchEventMage_Cron内のインスタンスを表示できません。

回答:


13

これらの種類のcronジョブには、cron設定が呼び出されたときに呼び出されるバックエンドモデルがあります。このモデルはcronジョブのランタイムを挿入しcore_config_data、cronスケジュールはそこから読み取ります。
例としてサイトマップcronを考えてみましょう。フィールド 'frequency'には次のバックエンドモデルがあります(を参照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::_generateJobscron_schedule

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.