Magento 2는 cron : run CLI 명령없이 특정 Cron을 실행합니까?


14

긴 이야기를 짧게 만들기 위해 xdebug는 표준을 사용할 때 cron 파일의 중단 점을 안정적으로 중지하지 않습니다.

php bin/magento cron:run

Xdebug는 모두 올바르게 설정되어 있으며 때로는 작동하지만 85 %의 시간은 phpstorm에서 연결 수신을 끌 때까지 CLI에서 멈추지 않습니다.

어떻게 든 하나의 cron 파일을 실행할 수 있습니까? 실제로 크론 파일의 내용을 별도의 콘솔 명령에 복사하여 붙여 넣어 xdebug에서 적절하지 않은 테스트를 수행해야했습니다.

Magento 1.x에서는 관리자로 가서 원하는 항목을 선택하고 드롭 다운에서 실행을 선택하여 Xdebug에서 cron 작업을 테스트하기 위해 AOE 스케줄러를 사용했습니다.

나는 다음과 같은 것을 사용하려고합니다 :

php bin/magento modulename:cronjob

예약되지 않은 경우에도 항상 cron을 실행해야합니다.

답변:


16

간단하게 생각하십시오! Cron 클래스는 "정상"클래스입니다. Playground를 사용하여 Cron을 테스트 할 수 있습니다 : test.php 스크립트에서 Magento 2를 어떻게 부트 스트랩 할 수 있습니까? . 개체 관리자가 Cron 개체를 만듭니다. 그런 다음 브라우저에서 직접 URL을 호출하여 Cron을 테스트 할 수 있습니다.

** Nginx를 사용하는 경우 이러한 파일을 pub / 폴더에 넣고 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를 pub 디렉토리에 넣어야했습니다. 그 후 Test.php의 경로를 조정해야합니다 : require '../app/bootstrap.php'; TestApp.php에도 : 가 있어야합니다. return $this->_response; 또는 phpstorm 스크린 샷에는 있지만 실제 코드는 아닌 오류가 발생합니다. 나는 이것으로 당신의 대답을 편집하고 시도 할 것입니다.
케빈 차베스

@KevinJavitz 천만에요!
Khoa TruongDinh

18

개발 시간을 절약하는 옵션 은 Magento 2에 N98MageRun 을 사용하는 입니다.

이것은 훌륭한 명령 sys:cron:list을 가지고 sys:cron:run있습니다.

이 명령을 사용하면 cron의 특정 작업 코드를 찾은 다음 명령 행에서 해당 cron 만 트리거 할 수 있습니다.

그것은 쉽게를 통해 설치 될 수 있습니다 composer require-dev n98/magerun2및 젠토이 작업 할 때 나는 dev에 설치로 이동해야합니다 추천


OMG Wao 명령으로 cronjob을 실행하는 가장 좋은 방법
Learner

4

두 파일을 사용하여 달성 할 수 있습니다.

다음과 같이 프로젝트 루트에 폴더와 클래스를 만듭니다.

크론 /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);

cron을 실행하려면 프로젝트 루트 경로로 cli로 이동하여 아래 명령을 실행하십시오.

php crons/cronprocess.php

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.