Magento 2, क्रोन के बिना एक विशिष्ट क्रोन चलाते हैं: CLI कमांड चलाते हैं?


14

एक लंबी कहानी बनाने के लिए लघु xdebug विशिष्ट रूप से उपयोग करते समय मेरी क्रोन फ़ाइलों में ब्रेकपॉइंट्स पर मज़बूती से रोक नहीं पाएगा:

php bin/magento cron:run

Xdebug सभी सेटअप ठीक से है और कभी-कभी यह काम करेगा लेकिन 85% समय यह तब तक नहीं होगा और जब तक मैं phpstorm में कनेक्शन के लिए सुनना बंद नहीं कर देता तब तक CLI में लटका रहूंगा।

क्या किसी तरह सिर्फ एक क्रोन फ़ाइल चलाने का एक तरीका है? मुझे वास्तव में xdebug में इसे सही तरीके से जांचने के लिए अपनी क्रोन फ़ाइल की सामग्री को एक अलग कंसोल कमांड पर कॉपी और पेस्ट करना था जो कि आदर्श नहीं है।

Magento 1.x में मैं एओई शेड्यूलर का उपयोग करता था जो कि Xdebug के साथ क्रोन नौकरियों के परीक्षण के लिए व्यवस्थापक के पास जाता था, जो मैं चाहता था, उसकी जांच कर रहा था और ड्रॉपडाउन से रन चुन रहा था और यह ठीक काम कर रहा था।

मैं कुछ का उपयोग करने के लिए देख रहा हूँ जैसे:

php bin/magento modulename:cronjob

जो हमेशा अनुसूचित नहीं होने पर भी क्रोन चलाना चाहिए।

जवाबों:


16

सरल सोचो! क्रोन वर्ग एक "सामान्य" वर्ग है। हम अपने क्रोन का परीक्षण करने के लिए एक प्लेग्राउंड का उपयोग कर सकते हैं: मैं एक टेस्ट.php स्क्रिप्ट में Magento 2 कैसे बूट कर सकता हूं? । ऑब्जेक्ट मैनेजर हमारी क्रोन ऑब्जेक्ट बनाएगा। और फिर, हम ब्राउज़र पर सीधे यूआरएल को कॉल करके अपने क्रोन का परीक्षण कर सकते हैं।

** ध्यान दें कि यदि Nginx का उपयोग कर आप इन फ़ाइलों को पब / फ़ोल्डर में रख सकते हैं और Test.php फ़ाइल के लिए आवश्यक पथ समायोजित कर सकते हैं require '../app/bootstrap.php';

test.php

<?php
require __DIR__ . '/app/bootstrap.php';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication('TestApp');
$bootstrap->run($app);

TestApp.php

 public function launch()
 {
        /** @var \Vendor\Module\Cron\Test $cron */
        $cron = \Magento\Framework\App\ObjectManager::getInstance()
            ->create('Vendor\Module\Cron\Test');

        $cron->execute();

        return $this->_response;

 }

यहाँ छवि विवरण दर्ज करें


1
धन्यवाद, इसने मेरे लिए काम किया लेकिन थोड़ा ट्विकिंग के साथ। चूंकि मैं Nginx का उपयोग कर रहा हूं, यह रूट निर्देशिका की जांच नहीं करता है, इसलिए मुझे पब निर्देशिका में Test.php और TestApp.php डालनी थी। उसके बाद मैंने Test.php पर पथ को समायोजित करने की आवश्यकता है: require '../app/bootstrap.php'; TestApp.php पर भी यह करने की आवश्यकता है: return $this->_response; या यह एक त्रुटि फेंक देगा जो आपके phpstorm स्क्रीनशॉट पर है, लेकिन वास्तविक कोड नहीं है। मैं इसके साथ आपका उत्तर संपादित करने का प्रयास करूंगा।
केविन चावेज़

@KevinJavitz आपका स्वागत है!
बजे खोआ TruongDinh

18

विकास समय में बचाने के लिए विकल्प पर Magento 2 के लिए N98MageRun का उपयोग करना होगा ।

यह अद्भुत आदेश है sys:cron:listऔर sys:cron:run

इन आदेशों का उपयोग करके आप अपने क्रोन के लिए विशिष्ट जॉब कोड ढूंढ पाएंगे और फिर कमांड लाइन से उस क्रोन को ट्रिगर कर पाएंगे।

यह आसानी से स्थापित किया जा सकता है composer require-dev n98/magerun2और मैं यह सिफारिश करूंगा कि यह मैगेंटो 2 के साथ काम करते समय देव इंस्टालेशन में जाए


OMG वाओ सबसे अच्छा तरीका है क्रोनजॉब को केवल एक कमांड द्वारा
शिक्षार्थी

4

आप दो फ़ाइलों का उपयोग करके प्राप्त कर सकते हैं:

परियोजना की जड़ में फ़ोल्डर और कक्षा बनाएँ:

crons / CronprocessApp.php

    <?php
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\App\Filesystem\DirectoryList;
use phpseclib\Net\SFTP;
use phpseclib\Crypt\RSA;

class CronprocessApp
    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('any area'); // or 'adminhtml', depending on your needs
        $state->setAreaCode('adminhtml'); // or 'adminhtml', depending on your needs
    }
    public function launch()
    {
        /** @var \Vendor\Module\Cron\Test $cron */
        $cron = \Magento\Framework\App\ObjectManager::getInstance()
            ->create('Custom\Preorder\Cron\ChangeVisiblityNonPreorderProduct'); //pass the name of your cron class path 
        $cron->execute();       


        return $this->_response;

    }
    public function catchException(\Magento\Framework\App\Bootstrap $bootstrap, \Exception $exception)
    {
        return false;
    }
}
?>

एक और वर्ग फ़ाइल बनाएँ:

crons / Cronprocess.php

 <?php
require __DIR__ . '/../app/bootstrap.php';
require __DIR__ . '/../crons/cronprocessApp.php';

$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication('CronprocessApp');
$bootstrap->run($app);

क्रोन को चलाने के लिए प्रोजेक्ट रूट पथ के साथ cli पर जाएं और कमांड से नीचे चलाएं:

php crons/cronprocess.php

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.