Magento 2: Cron ausführen

11

Wie kann ich Cron manuell über die Befehlszeile ausführen?

In Magento 1.x können wir cron wie folgt ausführen:

www.testsite.com/cron.php 

aber wie kann ich das in magento 2 machen?

Bitte helfen Sie mir auch, wie ich cron von cmd ausführen kann. Ich habe bereits den folgenden Befehl verwendet, der nicht funktioniert:

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

Dies gibt eine Ausnahme zurück:

[RuntimeException]   
Too many arguments.  

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

------- Update -------

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>

In der Ausführungsmethode der obigen Datei habe ich ein Protokoll abgelegt. Aber nach 1 Minute wird auch das nicht generiert. Wie kann ich also wissen, dass meine Methode ausgeführt wird?

Krupali
quelle
Zumindest für mich sieht es so aus, als könnten Sie sie immer noch wie Mage 1 ausführen, indem Sie
Ihre

Antworten:

17

Sie benötigen die Klammern nicht, wenn Sie den Befehl ausführen, daher sollten Sie Folgendes ausführen:

sudo php bin/magento cron:run --group="customgroupname_cron"
Raphael beim digitalen Pianismus
quelle
Ja, dies gibt die Antwort "Jobs nach Zeitplan ausgeführt". Aber bitte überprüfen Sie meine aktualisierte Quetion.
Krupali
4

Ich habe die anderen Antworten aus diesem Beitrag ein wenig zusammengeführt, sodass nur eine Datei benötigt wird und Cron-Jobs über den Browser oder die Befehlszeile ausgeführt werden können.

Verwendung über die Kommandozeile:

php cronLaunch.php "Vendor\Module\Class"

Nutzung über den Browser:

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

Installation

Ich schlage vor, den Quellcode von unten zu kopieren und darin zu speichern src/pub/hidden/cronLaunch.php. Es ist sehr wichtig, das hiddenVerzeichnis vor unbefugtem Zugriff zu schützen !

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

Vielen Dank und Dank an alle anderen Leute, die hier Antworten gepostet haben!

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

Die []Klammern in einem Befehlszeilenprototyp geben lediglich an, dass die darin enthaltenen Argumente optional sind.
In diesem Fall heißt es auch, dass sie verkettbar sind.

Julien Lachal
quelle