在Magento中设置计划任务

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值