В адмініструванні Magento 2 є багато процесів, які потребують автоматизації та планування. Оновлення курсів валют, надсилання розсилок та сповіщень про продукти обробляються зручною функцією за замовчуванням — Завдання cron у Magento

Крім того, багато розширень Magento 2 також постачаються з користувацькими завданнями cron для виконання різних завдань у модулі. Тож, якщо вам цікаво, як створити його для свого розширення, ви потрапили в потрібне місце. 

Сьогодні ви дізнаєтеся, як крок за кроком створити завдання cron у Magento 2.

Примітка: перед створенням власного завдання cron переконайтеся, що у вас є crons, відкривши crontab як власник файлової системи Magento. Виконайте таку команду:

crontab -l

Результат має бути таким: 

#~ MAGENTO START c5f9e5ed71cceaabc4d4fd9b3e827a2b
* * * * * /usr/bin/php /var/www/html/magento2/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/html/magento2/var/log/magento.cron.log
#~ MAGENTO END c5f9e5ed71cceaabc4d4fd9b3e827a2b

1. Створення простого модуля

Першим кроком для створення власного cron-завдання є створення Basic модуль у Magento . Якщо у вас вже є такий, перейдіть до наступного кроку.

2. Створення класу

Перейдіть до кореневого каталогу вашого власного модуля та створіть там cron-каталог.

наприклад, app/code/VendorName/ModuleName/ Cron

Потім створіть файл з назвою Cron/SomeCronModel.php з наступним кодом:

<?php

namespace VendorName\ModuleName\Cron;

class SomeCronModel
{
   public function execute()
{
         //your cron job code
    }
}

Клас, який ви створюєте, запише рядок у таблицю cron_schedule у базі даних, щоб підтвердити успішне виконання завдання cron.

3. Створіть файл crontab.xml

Додайте файл etc/crontab.xml (файл завдання cron, що налаштовується) до каталогу cron за допомогою наступного коду:

<?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="vendorname_modulename_cron_somecronmodel" instance="VendorName\ModuleName\Cron\SomeCronModel" method="execute">
<schedule>* * * * *</schedule>
</job>
</group>
</config>

default — ідентифікатор групи, до якої буде включено ваше завдання cron. Ми рекомендуємо додати його до групи за замовчуванням
vendorname_modulename_cron_somecronmodel — назва вашого завдання cron. Він має бути унікальним, тому ми рекомендуємо створити його з назви моделі cron-завдання
VendorName\ModuleName\Cron\SomeCronModel — назва моделі cron-завдання
execute — назва методу, що виконується в моделі cron-завдання
* * * * * — частота виконання cron-завдання.

4. Компіляція коду

Після завершення створення cron-завдання у вашому Magento 2 вам потрібно скомпілювати код. Виконайте таку команду:

bin/magento setup:di:compile

Додатково, очистіть кеш:

bin/magento cache:clean

5. Перевірка Cron-завдання

Щоб переконатися, що ваше власне cron-завдання Magento працює належним чином, перевірте його за допомогою SQL-запиту до таблиці cron_schedule . Запустіть завдання cron вручну , використовуючи таку команду:

bin/magento cron:run

Якщо ви використовуєте Модуль Magento 2 Cron Schedule , ви також можете виконати свій cron з панелі адміністратора. Просто перейдіть до Система > Cron > Cron Jobs та знайдіть своє власне cron-завдання, зазначене в сітці.

 magento cron jobs

Поставте галочку та виберіть команду Виконати з масової дії, щоб запустити свій cron.

Після виконання ви можете побачити це в Журналі розкладу разом з усіма іншими cron-завданнями.

 створити власне завдання cron у Magento

Вітаємо! Тепер ви знаєте, як створювати власні завдання cron у Magento 2. Однак зауважте, що їх створення та керування ними – це дві абсолютно різні речі.

Тому вам потрібно знати, як перевірити стан завдання cron та виконати його вручну, якщо щось піде не так.