Magento 2: Ejecutar Cron

11

¿Cómo puedo ejecutar Cron desde la línea de comandos manualmente?

En Magento 1.x podemos ejecutar cron como:

www.testsite.com/cron.php 

pero en magento 2, ¿cómo puedo hacer esto?

Por favor, ayúdame también para saber cómo puedo ejecutar cron desde cmd. Ya utilicé el siguiente comando que no funciona:

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

Esta es la excepción de retorno:

[RuntimeException]   
Too many arguments.  

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

------- Actualización -------

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>

En el método de ejecución del archivo anterior pongo log. Pero después de 1 minuto tampoco se genera eso. Entonces, ¿cómo puedo saber que mi método se ejecuta?

Krupali
fuente
Parece, al menos para mí, que todavía puedes ejecutarlos como Mage 1 haciendo yoursite.com/update/cron.php
tim.baker

Respuestas:

17

No necesita los corchetes cuando ejecuta el comando, por lo que debe ejecutar:

sudo php bin/magento cron:run --group="customgroupname_cron"
Raphael en Digital Pianism
fuente
Sí, esto está dando una respuesta que "Ran trabajos por horario". Pero por favor revise mi consulta actualizada.
Krupali
4

Combiné un poco las otras respuestas de esta publicación, por lo que solo se necesita un archivo y los trabajos cron se pueden ejecutar a través del navegador o la línea de comandos.

Uso a través de la línea de comando:

php cronLaunch.php "Vendor\Module\Class"

Uso a través del navegador:

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

Instalación

Sugiero copiar el código fuente desde abajo y almacenarlo en src/pub/hidden/cronLaunch.php. ¡Es muy importante proteger el hiddendirectorio de cualquier acceso no 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);

¡Gracias y créditos a todas las demás personas que publicaron respuestas aquí!

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

Los []corchetes en un prototipo de línea de comando simplemente indican que los argumentos que contienen son opcionales.
En este caso, también establece que son encadenables.

Julien Lachal
fuente