Magento 2: exécuter Cron

11

Comment puis-je exécuter Cron à partir de la ligne de commande manuellement.

Dans Magento 1.x, nous pouvons exécuter cron comme:

www.testsite.com/cron.php 

mais dans magento 2, comment faire?

Veuillez également m'aider à savoir comment exécuter cron à partir de cmd. J'ai déjà utilisé la commande ci-dessous qui ne fonctionne pas:

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

Cela renvoie une exception:

[RuntimeException]   
Too many arguments.  

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

------- Mettre à jour -------

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>

Dans la méthode d'exécution du fichier ci-dessus, je mets le journal. Mais après 1 minute, cela n'est pas non plus généré. Comment savoir que ma méthode est exécutée?

Krupali
la source
Il me semble, du moins, que vous pouvez toujours les exécuter comme Mage 1 en faisant yoursite.com/update/cron.php
tim.baker

Réponses:

17

Vous n'avez pas besoin des crochets lorsque vous exécutez la commande, vous devez donc exécuter:

sudo php bin/magento cron:run --group="customgroupname_cron"
Raphael chez Digital Pianism
la source
Oui, cela donne une réponse "Ran jobs by schedule". Mais veuillez vérifier ma mise à jour.
Krupali
4

J'ai un peu fusionné les autres réponses de ce post - de sorte qu'un seul fichier est nécessaire, et les tâches cron peuvent être exécutées via un navigateur ou une ligne de commande.

Utilisation via la ligne de commande:

php cronLaunch.php "Vendor\Module\Class"

Utilisation via navigateur:

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

Installation

Je suggère de copier le code source par le bas et de le stocker src/pub/hidden/cronLaunch.php. Il est très important de protéger l' hiddenannuaire de tout accès non autorisé!

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

Merci et remerciements à toutes les autres personnes qui ont posté des réponses ici!

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

Les []crochets d'un prototype de ligne de commande indiquent simplement que les arguments qu'ils contiennent sont facultatifs.
Dans ce cas, il indique également qu'ils peuvent être chaînés.

Julien Lachal
la source