说到Magento 2和cron作业,与Magento 1相比有一些改进。

它仍然是抽象的,因为你没有直接运行作业,相反,您使用cron语法通过Magento调度器设置周期性方法执行,该调度程序在系统的cron实用程序之上工作。

这里有一些有用的提示,可以帮助你开始建立自己的网站。


当我们将它与Magento 1进行比较时,数据库似乎没有改变,但配置发生了变化。
Magento 2从cron_schedule表执行条目,就像Magento 1一样。

配置方面的变化是,现在我们可以对作业进行分组并选择是否希望将作业作为单独的进程并行执行,这有时非常方便。

因此,为了在Magento中运行计划任务,首先我们需要确保配置以下任务以通过系统cron运行。这是最简单的方法:

*/1 * * * * /path/to/php /path/to/m2/installation/bin/magento cron:run [>> /log/file &]
*/1 * * * * /path/to/php /path/to/m2/installation/update/cron.php [>> /log/file &]
*/1 * * * * /path/to/php /path/to/m2/installation/bin/magento setup:cron:run [>> /log/file &

至此,您已经准备好了M2所有的默认任务!

那么,如何设置你的计划任务呢?

这或多或少与Magento 1中的方式类似。
首先,您需要在自定义模块中使用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"> <!-- Doesn't need to be unique -->
        <job name="cron_example" instance="Magease\CronExample\Cron\Example" method="execute">
            <schedule>* * * * *</schedule>
        </job>
    </group>
</config>

上面的配置是确保每分钟都运行Magease\CronExample\Cron\Example:execute(),根据下面的代码,每分钟记录它的名称

<?php
namespace Magease\CronExample\Cron;
class Example {
 
    protected $_logger;
 
    public function __construct(\Psr\Log\LoggerInterface $logger) {
        $this->_logger = $logger;
    }
 
    public function execute() {
        $this->_logger->info(__METHOD__);
        return $this;
    }
}

值得一提的是,您可以选择只运行一个任务组。

代码如下:

magento cron:run [--group="cron_group_name"]