ম্যাজেন্টো 2 কোনও ক্রোন ছাড়াই একটি নির্দিষ্ট ক্রোন চালান: সিএলআই কমান্ড চালান?


14

একটি দীর্ঘ গল্পের শর্ট এক্সডিবাগ টিপিক্যালটি ব্যবহার করার সময় আমার ক্রোন ফাইলগুলির ব্রেকপয়েন্টগুলিতে নির্ভরযোগ্যভাবে থামবে না:

php bin/magento cron:run

এক্সডিবাগ ঠিকঠাকভাবে ঠিকঠাক হয়ে গেছে এবং কখনও কখনও এটি কাজ করবে তবে 85% সময় এটি ব্যবহার করবে না এবং কেবলমাত্র সিএলআই-এ ঝুলবে যতক্ষণ না আমি পিএইচপিস্টর্মের সংযোগগুলির জন্য কান বন্ধ করি।

কীভাবে কোনওভাবে একটি ক্রোন ফাইল চালানোর উপায় আছে? Xdebug এ সঠিকভাবে পরীক্ষা করার জন্য আমার ক্রোন ফাইলের সামগ্রীগুলি একটি পৃথক কনসোল কমান্ডে কপি এবং পেস্ট করতে হয়েছিল যা আদর্শ নয়।

ম্যাজেন্টো 1.x এ আমি এক্সডিবুগের সাথে অ্যাডমিনে গিয়ে ক্রোন জব পরীক্ষা করার জন্য, আমি যা চাইছিলাম তা চেকবক্সিং করে এবং ড্রপডাউন থেকে রান বেছে বেছে এওই শিডিয়ুলার ব্যবহার করেছি এবং এটি দুর্দান্ত কাজ করেছে।

আমি এরকম কিছু ব্যবহার করতে চাইছি:

php bin/magento modulename:cronjob

যা নির্ধারিত না থাকলেও সর্বদা ক্রোন চালানো উচিত।

উত্তর:


16

সহজ চিন্তা করুন! ক্রোন শ্রেণি একটি "সাধারণ" শ্রেণি। আমরা আমাদের ক্রোন পরীক্ষা করতে একটি খেলার মাঠ ব্যবহার করতে পারি : আমি কীভাবে একটি টেস্ট.এফপি স্ক্রিপ্টে ম্যাজেন্টো 2 বুটস্ট্র্যাপ করতে পারি? । অবজেক্ট ম্যানেজারটি আমাদের ক্রোন অবজেক্ট তৈরি করবে। এবং তারপরে, আমরা সরাসরি ব্রাউজারে ইউআরএল কল করে আমাদের ক্রোন পরীক্ষা করতে পারি।

** দ্রষ্টব্য, Nginx ব্যবহার করে আপনি এই ফাইলগুলিকে পাব / ফোল্ডারে রেখে দিতে পারেন এবং টেস্ট.এফপি ফাইলের জন্য প্রয়োজনীয় পাথ সামঞ্জস্য করতে পারেন 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
আপনাকে ধন্যবাদ, এটি আমার পক্ষে কাজ করেছে তবে কিছুটা টুইট করে। যেহেতু আমি এনগিনেক্স ব্যবহার করছি এটি রুট ডিরেক্টরিটি পরীক্ষা করে না, তাই আমাকে পাব ডিরেক্টরিতে Test.php এবং TestApp.php রাখতে হয়েছিল। তারপরে আমি টেস্ট.এফপি-র উপরের পথটি সামঞ্জস্য করেছিলাম: require '../app/bootstrap.php'; এছাড়াও টেস্টঅ্যাপ.এফপিপি তেও হওয়া দরকার: return $this->_response; বা এটি আপনার পিএইচপিস্টর্মের স্ক্রিনশটটিতে থাকা একটি ত্রুটি ছুঁড়ে ফেলবে তবে আসল কোড নয়। আমি এটি দিয়ে আপনার উত্তরটি চেষ্টা করে সম্পাদনা করব।
কেভিন চাভেজ

@ কেভিন জাভিত্স আপনাকে স্বাগতম!
খোয়া ট্রুংদিনহ

18

উন্নয়নের সময় সাশ্রয়ের বিকল্পটিতে ম্যাজেন্টো 2 এর জন্য N98MageRun ব্যবহার করা হবে ।

এই বিস্ময়কর কমান্ড রয়েছে sys:cron:listএবং sys:cron:run

এই আদেশগুলি ব্যবহার করে আপনি আপনার ক্রনের জন্য নির্দিষ্ট কাজের কোডটি সন্ধান করতে পারবেন এবং কমান্ড লাইন থেকে ঠিক সেই ক্রোনটি ট্রিগার করতে পারবেন।

এটি সহজেই এর মাধ্যমে ইনস্টল করা যেতে পারে composer require-dev n98/magerun2এবং আমি Magento 2 এর সাথে কাজ করার সময় এটি ডিভাইস ইনস্টল করার চেষ্টা করা উচিত


ওএমজি ওয়াও কেবলমাত্র একটি আদেশ দিয়ে ক্রোনজব চালানোর সেরা উপায়
লার্নার

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

ক্রোন চালাতে প্রকল্পের রুট পাথ দিয়ে ক্লাইমে যান এবং কমান্ডের নীচে চলে যান:

php crons/cronprocess.php

0

কখনও কখনও এটি কাজ করবে তবে 85% সময় এটি ব্যবহার করবে না এবং কেবল সিএলআইতে ঝুলবে যতক্ষণ না আমি পিএইচপিস্টর্মের সংযোগগুলির জন্য শ্রবণ বন্ধ করি।

কীভাবে এক্সডিবাগকে চলমান অবস্থায় লক করা থেকে রোধ করা যায় bin/magento cron:run

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.