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. Как я вижу, это не помогает.
Что я сделал не так. Пожалуйста, помогите.
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 непосредственно из панели администратора.
Я только что переопределил несколько собственных заданий 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 |
+------------------------------+---------------------+