Magento模块中添加计划任务Cron Job 2012-03-04 01:22:02
分类: 系统运维
Magento提供了强大的计划任务功能(Cron Job),使用计划任务,我们可以方便的按照一定的时间规律生成Google网站地图,更新汇率,清除日志,降价通知等等,此外我们还可以根据需要在自己开发的模块中添加计划任务的功能,下面我们将介绍怎样在自己的模块中添加计划任务。
首先我们需要开启Cron功能,在服务器上添加Cron,如果你用的cPanel面板,在面板中可以直接添加,如果是自己的主机,比如Linux主机,我们可以这样添加:
- #crontab -e
添加
- */5 * * * * /bin/sh /var/www/magento1510/cron.sh
其中 */5 * * * * 表示系统将每5分钟执行一次这个脚本
/var/www/magento1510/cron.sh 是Magento网站根目录下的cron.sh文件的绝对地址,请根据自己的配置修改。
然后重启Cron
- #service cron restart
Magento将每五分钟检查各模块下的计划任务,并生成计划任务表,保存在cron_schedule表中,当某个计划任务符合时间条件,Magento便执行该计划任务,并把执行的情况记录在该表中,下面我们看以下怎样在模块中添加计划任务。
一个典型的例子是newsletter,我们在/app/code/core/Mage/Newsletter/etc/config.xml中发现了下面一些配置:
- <config>
- <crontab>
- <jobs>
- <newsletter_send_all>
- <schedule><cron_expr>*/5 * * * *</cron_expr></schedule>
- <run><model>newsletter/observer::scheduledSend</model></run>
- </newsletter_send_all>
- </jobs>
- </crontab>
- </config>
上面的配置指定了一个计划任务newsletter_send_all,它每五分钟执行一次,将执行Mage_Newsletter_Model_Observer类中的scheduledSend()函数,该文件位于/app/code/Mage/Newsletter/Model/Observer.php,打开该文件就可以看到该计划任务执行的内容,如果我们要在自己的模块中添加计划任务,按照上面的例子在config.xml添加相应的contab即可。
第二章
分类: 系统运维
在上一篇文章
《Magento模块中添加计划任务Cron Job》中,我们简单地介绍了怎样为Magento设置计划任务(Cron Job),这篇文章中我们将通过一个简单的实例介绍为一个模块添加计划任务的方法,在这个例子中,我们将添加这样的一个计划任务:每5分钟使用Mage::log('Hello, World!');在/var/log/system.log文件中添加一行"Hello, World!"。
1 新建模块
在/app/code/local/MagentoBoy/MyCron目录下新建一个模块MagentoBoy_MyCron,并添加模块文件:
/app/etc/modules/MagentoBoy_MyCron.xml
- <?xml version="1.0"?>
- <config>
- <modules>
- <MagentoBoy_MyCron>
- <active>true</active>
- <codePool>local</codePool>
- </MagentoBoy_MyCron>
- </modules>
- </config>
并添加配置文件:
/app/code/local/MagentoBoy/MyCron/etc/config.xml
- <?xml version="1.0"?>
- <config>
- <modules>
- <MagentoBoy_MyCron>
- <version>0.1.0</version>
- </MagentoBoy_MyCron>
- </modules>
- </config>
2 添加Cron Job
修改配置文件config.xml,添加
- <config>
- <global>
- <models>
- <mycron>
- <class>MagentoBoy_MyCron_Model</class>
- </mycron>
- </models>
- </global>
- <crontab>
- <jobs>
- <log_helloworld>
- <schedule>
- <cron_expr>*/5 * * * *</cron_expr>
- </schedule>
- <run>
- <model>mycron/observer::helloWorld</model>
- </run>
- </log_helloworld>
- </jobs>
- </crontab>
- </config>
我们必须为计划任务设置一个唯一的标识符,这里我们设置为log_helloworld
计划任务的周期配置在cron_expr中设置,因为这个任务的周期为5分钟每次,所以我们设置为*/5 * * * *
计划任务执行的函数在model中设置,我们这里设置为mycron/observer::helloWorld,对应的文件为/app/code/local/MagentoBoy/MyCron/Model/Observer.php,我们添加这个文件,并添加要执行的函数helloWorld():
- <?php
- class MagentoBoy_Mycron_Model_Observer
- {
- public function helloWorld()
- {
- Mage::log('Hello, World!');
- return $this;
- }
- }
刷新缓存,观察/var/log/system.log文件,我们将发现系统每5分钟向该文件添加一行"Hello, World!"。