Magento 2:执行Cron


11

如何从命令行手动执行Cron。

在Magento 1.x中,我们可以像这样运行cron:

www.testsite.com/cron.php 

但是在magento 2中,我该怎么做?

也请帮助我如何从cmd执行cron。我已经使用下面的命令不起作用:

sudo php bin/magento cron:run [--group="customgroupname_cron"]

这是返回异常:

[RuntimeException]   
Too many arguments.  

cron:run [--group="..."] [--bootstrap="..."]

-------更新-------

crontab.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">

    <group id="customgroupname_cron">
        <job name="customgroupname_cron" instance="Namespace\Modulename\Cron\Customcronjob" method="execute">
            <schedule>* * * * *</schedule>
        </job>
    </group>
</config>

在上述文件的执行方法中,我放入了日志。但是一分钟后也没有生成,所以我怎么知道我的方法已经执行了。


至少对我来说,看起来您仍然可以通过执行yoursite.com/update/cron.php像Mage 1一样运行它们
tim.baker

Answers:


17

运行命令时不需要括号,因此应运行:

sudo php bin/magento cron:run --group="customgroupname_cron"

是的,这是响应“按计划运行作业”。但是请检查我更新的问题。
Krupali '16

4

我合并了这篇文章中的其他答案-因此只需要一个文件,即可通过浏览器或命令行运行cron作业。

通过命令行使用:

php cronLaunch.php "Vendor\Module\Class"

通过浏览器使用:

https://my.domain/hidden/cronLaunch.php?Vendor\Module\Class

安装

我建议从下面复制源代码并将其存储在中src/pub/hidden/cronLaunch.php。保护hidden目录免受任何未经授权的访问非常重要!

<?php
require '../../app/bootstrap.php';
if (php_sapi_name() !== 'cli' && isset($_GET['job'])) {
    define('CRONJOBCLASS', $_GET['job']);
} elseif (php_sapi_name() !== 'cli') {
    die('Please add the class of the cron job you want to execute as a job parameter (?job=Vendor\Module\Class)');
} elseif (!isset($argv[1])) {
    die('Please add the class of the cron job you want to execute enclosed IN DOUBLE QUOTES as a parameter.' . PHP_EOL);
} else {
    define('CRONJOBCLASS', $argv[1]);
}

class CronRunner extends \Magento\Framework\App\Http
    implements \Magento\Framework\AppInterface
{

    public function __construct(
        \Magento\Framework\App\State $state,\Magento\Framework\App\Response\Http $response)
    {
        $this->_response = $response;
        $state->setAreaCode('adminhtml');
    }

    function launch()
    {
        $cron = \Magento\Framework\App\ObjectManager::getInstance()
            ->create(CRONJOBCLASS);

        $cron->execute();
        return $this->_response;
    }
}

$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
$app = $bootstrap->createApplication('CronRunner');
$bootstrap->run($app);

感谢所有在此发布答案的其他人!


3
cron:run [--group="..."] [--bootstrap="..."]

[]命令行原型中的方括号仅表明它们包含的参数是可选的。
在这种情况下,它还声明它们是可链接的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.