Magento 2: Executar Cron


11

Como posso executar o Cron a partir da linha de comando manualmente.

No Magento 1.x, podemos executar o cron como:

www.testsite.com/cron.php 

mas no magento 2 como posso fazer isso?

Por favor, também me ajude sobre como executar o cron a partir do cmd. Eu já usei abaixo o comando que não está funcionando:

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

Isso está retornando a exceção:

[RuntimeException]   
Too many arguments.  

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

------- Atualização -------

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>

No método execute do arquivo acima eu coloquei log. Mas depois de 1 minuto também isso não é gerado. Então, como eu pude saber que meu método é executado.


Parece, para mim a menos, como você ainda pode executá-los como Mago 1, fazendo yoursite.com/update/cron.php
tim.baker

Respostas:


17

Você não precisa dos colchetes ao executar o comando, portanto, você deve executar:

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

Sim, isso está dando uma resposta que "Ran jobs by schedule". Mas, por favor, verifique minha frase atualizada.
Krupali

4

Mesclei um pouco as outras respostas desta postagem - para que apenas um arquivo seja necessário e os trabalhos cron possam ser executados via navegador ou linha de comando.

Uso via linha de comando:

php cronLaunch.php "Vendor\Module\Class"

Uso via navegador:

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

Instalação

Sugiro copiar o código fonte abaixo e armazená-lo src/pub/hidden/cronLaunch.php. É muito importante proteger o hiddendiretório de qualquer acesso não autorizado!

<?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);

Obrigado e créditos a todas as outras pessoas que postaram respostas aqui!


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

Os []colchetes em um protótipo de linha de comando indicam apenas que os argumentos que eles contêm são opcionais.
Nesse caso, também afirma que eles são encadeados.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.