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 这条记录。