 
                                        
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.