Magento2 创建计划任务

Magento 2 创建计划任务就是设定一个准时执行的计划列表,当你运行 Magento 2 商店的时候是非常方便的。为什么它是一个非常有用的功能?例如:你需要在特定时间运行网站统计或从内容管理系统获取信息,但是你在当时可能没有时间去做这件事,这样你就可以在你网站的服务端创建计划任务去帮你完成这项工作。

你在找一个容易理解的教程吗?这篇文章是为你准备的。这里将提到简单明了讲解计划任务。

文章内容:

  • 什么是计划任务?
  • 为什么需要计划任务?
  • 创建并运行计划任务
    • 创建 crontab.xml
    • 创建 Test.php

什么是计划任务?

计划任务是开源操作系统 Linux 的重要特性,它会为你想要执行的任务创建一个合适的命令或者脚本,用来替代人工操作,并且允许在特定的时间或日期自动执行。由于计划任务是自动执行的,对于每周或者每天的重复工作是一个不错的选择。

在 Magento 中,配置计划任务是非常重要的,可以为许多的系统事件设置计划任务,例如:重建索引、自动更新汇率、发送邮件等。只有计划任务配置正确,他才会自动执行,在配置错误的情况下,Magento 是不会按照预期执行计划任务的。

为什么需要计划任务?

许多 Magento 功能都至少需要一个计划任务用来安排在未来的某个时间调用执行。

这些任务的部分清单如下:

  • 记录价格规则

  • 实时通讯

  • 生成谷歌站点地图

  • 客户警报/通知(商品价格改变,库存情况)

  • 重建索引

  • 私人买卖(只限 Magento 商业)

  • 自动更新汇率

  • 所有邮件(包括订单确认和交易信息)

创建并运行计划任务

你可以按照自己的意愿根据教程去创建一个计划任务程序,大致步骤如下:

  • 在“Cron”文件夹下创建一个类。

  • 使用 PHP:bin/magento cron:run 手动设置计划任务调度。

  • 计划任务执行后查看日志文件 var/log/system.log。

  • 登录 Magento 2 管理面板,在Stores > Configuration > Advanced > System 路径下,更改计划任务组的调度设置。

  • 最后,在命令行界面执行 magento cron:run [–group=“”] 命令,运行计划任务。

现在,我们在 HelloWorld 模块中添加一个计划任务

创建 crontab.xml

文件路径: app/code/Mageplaza/HelloWorld/etc/crontab.xml

文件内容:

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
	<group id="default">
		<job instance="Mageplaza\HelloWorld\Cron\Test" method="execute" name="mageplaza_helloworld_cron">
			<schedule>* * * * *</schedule>
		</job>
	</group>
</config>
  • group id 是计划任务组的名字。一次只能执行一个计划任务组
  • job instance 是被实例化的类(类的路径)
  • job method 是调用 job instance 的方法
  • job name 是计划任务的唯一名称
  • schedule 是计划任务的时间格式,下面将说明时间格式的内容
* * * * * 要执行的命令
| | | | |
| | | | +----- 周 (0 - 7) (周日=0 or 7)
| | | +------- 月份 (1 - 12)
| | +--------- 日 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)

创建 Test.php

文案路径: app/code/Mageplaza/HelloWorld/Cron/Test.php

文件内容:

<?php

namespace Mageplaza\HelloWorld\Cron;

class Test
{

	public function execute()
	{

		$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/cron.log');
		$logger = new \Zend\Log\Logger();
		$logger->addWriter($writer);
		$logger->info(__METHOD__);

		return $this;

	}
}

全部完成后,请刷新缓存并且在命令行执行:magento cron:run --group=“default”

为了检测计划任务是否正常工作,可以去查看 var/log/cron.log 日志文件,你将会看到的Mageplaza\HelloWorld\Cron\Test::execute 这条记录。

本教程翻译自Mageplaza模块开发系列,其他内容请点击下面链接: