Magento 2: Thực thi Cron


11

Làm thế nào tôi có thể thực thi Cron từ dòng lệnh bằng tay.

Trong Magento 1.x chúng ta có thể chạy cron như:

www.testsite.com/cron.php 

nhưng trong magento 2 tôi có thể làm điều này như thế nào?

Xin hãy giúp tôi làm thế nào tôi có thể thực thi cron từ cmd. Tôi đã sử dụng lệnh dưới đây không hoạt động:

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

Đây là ngoại lệ trả về:

[RuntimeException]   
Too many arguments.  

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

------- Cập nhật -------

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>

Trong phương thức thực hiện của tập tin trên tôi đặt log. Nhưng sau 1 phút cũng không được tạo. Vì vậy, làm thế nào tôi có thể biết rằng phương thức của tôi được thực thi.


Đối với tôi, có vẻ như, bạn vẫn có thể chạy chúng như Mage 1 bằng cách thực hiện yoursite.com/update/cron.php
tim.baker

Câu trả lời:


17

Bạn không cần dấu ngoặc khi chạy lệnh vì vậy bạn nên chạy:

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

Có, đây là một phản hồi rằng "Ran làm việc theo lịch trình". Nhưng xin vui lòng kiểm tra quetion cập nhật của tôi.
Krupali

4

Tôi đã hợp nhất các câu trả lời khác từ bài đăng này một chút - để chỉ cần một tệp và các công việc cron có thể được chạy qua trình duyệt hoặc dòng lệnh.

Sử dụng thông qua dòng lệnh:

php cronLaunch.php "Vendor\Module\Class"

Sử dụng qua trình duyệt:

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

Cài đặt

Tôi đề nghị sao chép mã nguồn từ bên dưới và lưu trữ nó vào src/pub/hidden/cronLaunch.php. Điều rất quan trọng để bảo vệ hiddenthư mục khỏi bất kỳ truy cập trái phép!

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

Cảm ơn và tín dụng cho tất cả những người khác đã đăng câu trả lời ở đây!


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

Các []dấu ngoặc trong một nguyên mẫu dòng lệnh đơn thuần chỉ ra rằng các đối số chúng chứa là không bắt buộc.
Trong trường hợp này, nó cũng nói rằng chúng có thể kết nối được.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.