During one of my latest Magento projects I had to create custom cron jobs, so I decided to write a small how-to guide, that might help you do the same.
FIRST OFF YOU WILL NEED A NEW CUSTOM BUNDLE.
In app/etc/modules/New_Module.xml
<?xml version="1.0"?> <config> <modules> <New_Module> <active>true</active> <codePool>local</codePool> </New_Module> </modules> </config>
In app/code/local/New/Module/etc
<?xml version="1.0"?> <config> <modules> <New_Module> <version>0.0.1</version> </New_Module> </modules> <global> <models> <new_module> <class>New_Module_Model</class> </new_module> </models> </global> <crontab> <jobs> <new_module> <schedule><cron_expr>*/1 * * * *</cron_expr></schedule> <run><model>new_module/observer::test</model></run> </new_module> </jobs> </crontab> </config>
Please note that the model tag is the same used in the run/model tag in the crontab job.
For this example, the job will be run every minute.
As a reference, this is the syntax of the cron_expr:
- Minute: */5
- Hour: *
- Day of the Month: *
- Month: *
- Day of the Week: *
In app/code/local/New/Module/Model/Observer.php
class New_Module_Model_Observer { public function test() { //Do something amazing return $this; } }
THAT’S ALL, NOW TO TEST:
1) Refresh the cache
2) Delete everything in the cron_schedule table.
3) Run the following command to schedule all the jobs, you will notice that the cron_schedule table will be filled with some entries, you should also see the entry new_module .
2) Delete everything in the cron_schedule table.
3) Run the following command to schedule all the jobs, you will notice that the cron_schedule table will be filled with some entries, you should also see the entry new_module .
php -q path/to/my/magento/root/cron.php
4) Run it again and your cron job will be executed.