Magento 2: Execute Cron


11

ฉันจะรัน Cron จากบรรทัดคำสั่งด้วยตนเองได้อย่างไร

ใน Magento 1.x เราสามารถใช้ cron เช่น:

www.testsite.com/cron.php 

แต่ในวีโอไอพี 2 ฉันจะทำสิ่งนี้ได้อย่างไร

โปรดช่วยฉันด้วยสำหรับวิธีที่ฉันเรียกใช้ cron จาก cmd ฉันใช้คำสั่งด้านล่างแล้วซึ่งไม่ทำงาน:

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

นี่คือข้อยกเว้นที่ส่งคืน:

[RuntimeException]   
Too many arguments.  

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

------- อัปเดต -------

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>

ในการดำเนินการวิธีการของไฟล์ด้านบนฉันใส่บันทึก แต่หลังจากนั้น 1 นาทีนั่นก็ไม่ได้ถูกสร้างขึ้นฉันจะรู้ได้อย่างไรว่าวิธีการของฉันนั้นได้รับการดำเนินการ


สำหรับฉันอย่างน้อยดูเหมือนว่าคุณยังสามารถเรียกใช้พวกเขาเหมือน Mage 1 โดยทำ yoursite.com/update/cron.php
tim.baker

คำตอบ:


17

คุณไม่ต้องการวงเล็บเมื่อคุณเรียกใช้คำสั่งดังนั้นคุณควรเรียกใช้:

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

ใช่นี่คือการตอบสนองที่ "วิ่งงานตามกำหนดเวลา" แต่โปรดตรวจสอบคำถามที่อัพเดทของฉัน
Krupali

4

ฉันรวมคำตอบอื่น ๆ จากการโพสต์นี้เล็กน้อย - เพื่อให้มีเพียงหนึ่งไฟล์ที่จำเป็นและงาน cron สามารถทำงานผ่านเบราว์เซอร์หรือบรรทัดคำสั่ง

การใช้งานผ่านทางบรรทัดคำสั่ง:

php cronLaunch.php "Vendor\Module\Class"

การใช้งานผ่านเบราว์เซอร์:

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

การติดตั้ง

src/pub/hidden/cronLaunch.phpฉันขอแนะนำให้คัดลอกรหัสที่มาจากด้านล่างและเก็บไว้ใน มันสำคัญมากที่จะต้องปกป้องhiddenไดเรกทอรีจากการเข้าถึงที่ไม่ได้รับอนุญาตใด ๆ !

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

ขอขอบคุณและให้เครดิตกับทุกคนที่โพสต์คำตอบที่นี่!


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

[]วงเล็บในต้นแบบบรรทัดคำสั่งเพียงแสดงให้เห็นว่าข้อโต้แย้งพวกเขามีเป็นตัวเลือก
ในกรณีนี้มันยังระบุด้วยว่าพวกมันสามารถเชนได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.