Magento 2: Как переопределить родной crontab.xml


Я хотел бы переопределить некоторые задания cron собственного crontab.xml

Например,

Vendor/amzn/amazon-pay-and-login-magento-2-module/src/Payment/etc/crontab.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
    <group id="default">
        <job name="get_amazon_capture_updates" instance="Amazon\Payment\Cron\GetAmazonCaptureUpdates" method="execute">
            <schedule>*/5 * * * *</schedule>
        </job>
        <job name="get_amazon_authorization_updates" instance="Amazon\Payment\Cron\GetAmazonAuthorizationUpdates" method="execute">
            <schedule>*/5 * * * *</schedule>
        </job>
        <job name="amazon_payments_process_queued_refunds" instance="Amazon\Payment\Cron\ProcessAmazonRefunds" method="execute">
            <schedule>*/5 * * * *</schedule>
        </job>
    </group>
</config>

Я создал здесь очень простое расширение

Приложение/код/пользовательское приложение/Cron/

С файлом

App/code/CustomVendor/Cron/etc/crontab.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
    <group id="default">

        <job name="get_amazon_capture_updates" instance="Amazon\Payment\Cron\GetAmazonCaptureUpdates" method="execute">
            <schedule>0 1 * * 1</schedule>
        </job>
        <job name="get_amazon_authorization_updates" instance="Amazon\Payment\Cron\GetAmazonAuthorizationUpdates" method="execute">
            <schedule>0 1 * * 1</schedule>
        </job>
        <job name="amazon_payments_process_queued_refunds" instance="Amazon\Payment\Cron\ProcessAmazonRefunds" method="execute">
            <schedule>0 1 * * 1</schedule>
        </job>

        <job name="magento_newrelicreporting_cron" instance="Magento\NewRelicReporting\Model\Cron" method="runCron">
            <schedule>0 2 * * 1</schedule>
        </job>

    </group>
</config>

Я выполнил команды :

Настройка Php bin/magento: обновление

Php bin/magento cron: выполнить

Php bin/настройка magento: cron:выполнить

Проверено таблица cron_schedule. Как я вижу, это не помогает.

enter image description here

Что я сделал не так. Пожалуйста, помогите.

Author: Navin Bhudiya, 2019-04-22

2 answers

Лучший способ - добавить такую запись для таблицы core_config_data:

path : crontab/default/jobs/get_amazon_capture_updates/schedule/cron_expr
value : 0 1 * * 1
scope: default
scope_id: 0

Вы должны сделать это для всех закадычных друзей, которых вы хотите обновить. Я также предлагаю установить модуль https://github.com/Ethan3600/magento2-CronjobManager , который позволяет изменять расписание для каждого задания cron непосредственно из панели администратора.

 3
Author: rafal-kos, 2019-04-23 07:37:24

Я только что переопределил несколько собственных заданий cron, которые присутствовали в модуле Magento_Indexer.

Концепция заключается в том, что для переопределения собственного cron вам необходимо создать crontab.xml файл в вашем пользовательском модуле и используйте то же имя задания cron в вашем пользовательском модуле, которое указано в собственном задании cron. Также добавьте узел зависимости (sequence) в etc/module.xml.

Процесс, которому я следовал, чтобы достичь этого с помощью пользовательского модуля, приведен ниже.

Добавлен следующий код в etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Amitshree_Mymodule" setup_version="1.0.0">
        <sequence>
            <module name="Magento_Indexer"/>
        </sequence>
    </module>
</config>

И добавил приведенный ниже код в файл etc/crontab.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
    <group id="index">
        <job name="indexer_reindex_all_invalid" instance="Magento\Indexer\Cron\ReindexAllInvalid" method="execute">
            <schedule>5 * * * *</schedule>
        </job>
        <job name="indexer_update_all_views" instance="Magento\Indexer\Cron\UpdateMview" method="execute">
            <schedule>9 * * * *</schedule>
        </job>
        <job name="indexer_clean_all_changelogs" instance="Magento\Indexer\Cron\ClearChangelog" method="execute">
            <schedule>4 * * * *</schedule>
        </job>
    </group>
</config>

Вопрос: Как проверить, что он работает правильно?

Ответ: Выполните следующие действия, чтобы проверить это.

  • После внесения вышеуказанных изменений очистите свой кэш.
  • запустите команду php bin/magento cron:run из корневого каталога вашего проекта
  • Подключитесь к своей базе данных с помощью команды sql use magento2;
  • Выполните следующие sql-запросы


1. select job_code, scheduled_at from cron_schedule where job_code = 'indexer_reindex_all_invalid';

Вывод:

+-----------------------------+---------------------+
| job_code                    | scheduled_at        |
+-----------------------------+---------------------+
| indexer_reindex_all_invalid | 2020-02-26 11:05:00 |
+-----------------------------+---------------------+


2. select job_code, scheduled_at from cron_schedule where job_code = 'indexer_update_all_views';

Вывод:

+--------------------------+---------------------+
| job_code                 | scheduled_at        |
+--------------------------+---------------------+
| indexer_update_all_views | 2020-02-26 11:09:00 |
+--------------------------+---------------------+


3. select job_code, scheduled_at from cron_schedule where job_code = 'indexer_clean_all_changelogs';

Вывод:

+------------------------------+---------------------+
| job_code                     | scheduled_at        |
+------------------------------+---------------------+
| indexer_clean_all_changelogs | 2020-02-26 11:04:00 |
+------------------------------+---------------------+
 0
Author: amitshree, 2020-02-26 08:10:48