Cron是一个重要的实用程序,可让您以一定的定期间隔执行脚本。 对于基于Web的应用程序,它也已成为重要的方面。 cron对网站有用的方法有很多,从发送常规的新闻邮件到与第三方系统同步数据库。 您还可以使用cron清理后端存储,以提高应用程序的整体性能。
Magento像其他几个实用程序一样,在核心本身中支持cron! 它允许您在模块中设置计划任务,以便它们可以定期运行。 Magento使用位于站点根目录中的“ cron.sh”和“ cron.php”文件运行所有cron任务。 因此,您需要确保已设置系统级cron以定期运行“ cron.sh”文件,这最终会触发Magento cron系统。 最后,Magento收集位于模块中的所有cron作业,并在特定的cron运行中根据需要运行它们。
尽管Magento已经在核心模块本身中提供了很多cron作业,但是您也可以在模块中创建自定义cron任务。 创建自定义模块正是我们在接下来的部分中要讨论的。
文件设置概览
我们将创建一个名为“ Customcron”的简单定制模块。 以下是所需设置所需的文件列表:
- app / etc / modules / Envato_All.xml:这是一个用于启用我们的自定义模块的文件。
- app / code / local / Envato / Customcron / etc / config.xml:这是一个模块配置文件,我们将在其中声明自定义cron作业。
- app / code / local / Envato / Customcron / Model / Customcron.php:这是一个模型文件,我们将在其中定义cron作业逻辑。
自定义模块:设置文件和文件夹
首先,我们需要创建一个模块启动器文件。 创建一个文件“ app / etc / modules / Envato_All.xml”,并将以下内容粘贴到该文件中。 我们使用“ Envato”作为模块名称空间,使用“ Customcron”作为模块名称。 默认情况下,它将启用我们的“ Customcron”模块。
<?xml version="1.0"?>
<config>
<modules>
<Envato_Customcron>
<active>true</active>
<codePool>local</codePool>
</Envato_Customcron>
</modules>
</config>
接下来,我们需要创建一个模块配置文件。 创建“ app / code / local / Envato / Customcron / etc / config.xml”,并将以下内容粘贴到该文件中。
<?xml version="1.0"?>
<config>
<modules>
<Envato_Customcron>
<version>1.0</version>
</Envato_Customcron>
</modules>
<crontab>
<jobs>
<custom_cron_task>
<schedule>
<cron_expr>5,10,15,20,25,30,35,40,45,50,55 * * * *</cron_expr>
</schedule>
<run>
<model>customcron/customcron::customcrontask</model>
</run>
</custom_cron_task>
</jobs>
</crontab>
<global>
<models>
<customcron>
<class>Envato_Customcron_Model</class>
</customcron>
</models>
</global>
</config>
“ config.xml”文件看起来非常简单-根据Magento约定声明版本号和模型类。 但是,对我们来说重要的标记是<crontab>
,用于声明所有作业。 它是Magento用来收集模块中所有cron作业的“事件观察器”之一。
此外,在<jobs>
标记下,我们已使用<custom_cron_task>
标记声明了自定义crontab作业。 这是cron作业的唯一标识符。 尽管在上面的文件中,我们仅创建了一个任务,但是您可以在<jobs>
标签下设置多个cron作业。 接下来,在<custom_cron_task>
下,我们定义了<schedule>
和<run>
标记。
<schedule>
标记定义<cron_expr>
标记内的cron间隔,作业将在该间隔定期运行。 在我们的情况下,自定义cron任务将每五分钟运行一次。 但是,等等,每五分钟会做什么? 这正是<run>
标记所代表的! 它声明了“模型方法”,将在自定义cron作业运行期间由Magento调用。
接下来,我们将创建一个模型“ Cronjob.php”文件。 使用以下内容创建“ app / code / local / Envato / Customcron / Model / Customcron.php”。
<?php
class Envato_Customcron_Model_Customcron
{
public function customcrontask()
{
// send email
$mail = Mage::getModel('core/email')
->setToEmail('user@xxx.com')
->setBody('Body of the Custom Cron Task Goes Here')
->setSubject('Subject: Custom Cron Task (every 5 minutes) '.date("Y-m-d H:i:s"))
->setFromEmail('admin@yourmagentostore.com')
->setFromName('Magento Store Admin')
->setType('html');
$mail->send();
}
}
因此,正如我们之前所声明的,我们定义了“ customcrontask”模型方法。 在这种方法中,我们只是使用Magento电子邮件类实用程序发送电子邮件。 但更重要的是,这种方法将在每次cron作业运行时(当然每五分钟一次)定期调用。
最后,您应该确保已在系统中创建了cronjob条目。 对于Linux,您只需要将以下行添加到crontab文件中。
5,10,15,20,25,30,35,40,45,50,55 * * * * /bin/sh /path/to/magento/site/cron.sh
您只需要用Magento安装的实际路径替换“ / path / to / magento / site”。 对于Windows,您可以使用计划的任务执行相同的操作。 但是,在Windows中,您需要使用“ /path/to/magento/site/cron.php”文件,因为不支持“ cron.sh”。
因此,将您的自定义cron作业插入Magento cron系统真的很简单! 今天就是这样,我希望您已经学到了Magento的有用知识。 使用下面的提要分享您的想法!
翻译自: https://code.tutsplus.com/tutorials/set-up-scheduled-tasks-in-magento--cms-23858