Como criar Crons personalizadas no Magento 2

santanaluc94

Lucas Teixeira dos Santos Santana

Posted on November 12, 2021

Como criar Crons personalizadas no Magento 2

Contextualizando

O que é um Cron job?

Um cron job (trabalho agendado) é uma ferramenta de agendamento que permite controlar tarefas repetitivas a serem executadas em tempos pré-configurados. Através de um trabalho agendado é possível executar determinadas tarefas em horários, datas ou intervalos fixos.


Código

crontab.xml

Os trabalhos agendados são configurados no arquivo crontab.xml. É um arquivo que contém instruções para executar uma determinada tarefa automaticamente por determinados ciclos de um período. Esses arquivos devem seguir a estruturas de pastas \{Vendor}/{Module}/etc/{area}\crontab.xml.

O Magento depende da configuração adequada para muitas tarefas importantes, incluindo indexação. Falhando na configuração pode resultar que o Magento não funcione como esperado.

<?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="{group_name}">
        <job name="{job_name}" instance="{Vendor}\{Module}\Cron\{CronName}" method="{methodName}">
            <schedule>{time}</schedule>
        </job>
    </group>
</config>
Enter fullscreen mode Exit fullscreen mode
  • Group id: é um atributo obrigatório que contém o nome do grupo dos trabalhos agendados;
  • Job name: é um atributo obrigatório que contém o ID único do trabalho agendado;
  • Job instance: é um atributo obrigatório que contém o caminho da classe que será instanciada;
  • Job method: é um atributo obrigatório que contém o método que será executado ao instanciar a classe;
  • schedule: é uma tag terá um valor no formato dos agendamentos das crons.

Cron

Já os arquivos com a lógica que serão executados devem seguir a estrutura de pastas \{Vendor}\{Module}\Cron\{CronName} e não devem estender nenhuma classe, apenas conter o nome do método que será definido no atributo method do arquivo crontab.xml.

<?php

namespace {Vendor}\{Module}\Cron;

class {CronName}
{
    public function {methodName}(): {type}
    {
        // Code here
    }
}
Enter fullscreen mode Exit fullscreen mode

cron_groups.xml

Um grupo de trabalhos agendados é um grupo que permite a execução fácil de mais de um processo ao mesmo tempo. A maioria dos módulos do Magento utiliza o grupo default, caso a cron que esteja criando não pertença a este grupo ou um grupo já criado, este arquivo deve ser criado informando o nome do novo grupo . É possível declarar um novo grupo e especificar as opções de configurações (todas as configurações de acordo com o escopo) através do arquivo \{Vendor}\{Module}\etc\cron_groups.xml.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/cron_groups.xsd">
    <group id="{group_name}">
        <schedule_generate_every>{time}</schedule_generate_every>
        <schedule_ahead_for>{time}</schedule_ahead_for>
        <schedule_lifetime>{time}</schedule_lifetime>
        <history_cleanup_every>{time}</history_cleanup_every>
        <history_success_lifetime>{time}</history_success_lifetime>
        <history_failure_lifetime>{time}</history_failure_lifetime>
        <use_separate_process>{binary}</use_separate_process>
    </group>
</config>
Enter fullscreen mode Exit fullscreen mode
  • schedule_generate_every: frequência (em minutos) com que os planejamento são gravados na tabela cron_schedule;
  • schedule_ahead_for: tempo (em minutos) de antecedência com que os planejamento são gravados na tabela cron_schedule;
  • schedule_lifetime: janela de tempo (em minutos) que a tarefa agendada deverá ser iniciada ou será considerada como perdido;
  • history_cleanup_every: tempo (em minutos) que o histórico dos trabalhos agendados é mantido no banco de dados;
  • history_success_lifetime: tempo (em minutos) que o registro dos trabalhos agendados concluídos são mantidos no banco de dados;
  • history_failure_lifetime: tempo (em minutos) que o registro de trabalhos agendados fracassados são mantidos no banco de dados;
  • use_eparate_proccess: executa esse grupo de trabalho em um processo PHP separado.

Finalizando

Habilitando as alterações

Apague os arquivos que são gerados na compilação do Magento e execute o comando PHP para gerar a configuração das injeções de dependência e todas as classes ausentes que precisam ser geradas (proxys, interceptors, etc) e para limpar todos os caches de armazenamento em cache do processos.

rm -rf var/generation/
rm -rf generated/
php bin/magento setup:di:compile
php bin/magento cache:clean
php bin/magento flush
Enter fullscreen mode Exit fullscreen mode

Rodando as Crons

# Para executar todas as crons
php bin/magento cron:run

# Para executar as crons de um tereminado grupo
php bin/magento cron:run --group="{group_name}"
Enter fullscreen mode Exit fullscreen mode

Magerun

Magerun é uma ferramenta CLI (Command Line Interface) que pornece algumas ferramentas para trabalhar com Magento, é possível saber mais acessando o site da documentação do n98-magerun.

Um dos comandos possíveis de executar com o magerun é executar apenas uma cron específica.

./n98-magerun.phar sys:cron:run {job_name}
Enter fullscreen mode Exit fullscreen mode

Diretórios e Arquivos

Segue a a lista de diretórios e arquivos que devem ser criados.

- app/
  - code/
    - {Vendor}/
        - {Module}/
          - Cron/
            - {CronName}.php
          - etc/
            - crontab.xml
            - module.xml
          - registration.php
          - composer.json
Enter fullscreen mode Exit fullscreen mode
💖 💪 🙅 🚩
santanaluc94
Lucas Teixeira dos Santos Santana

Posted on November 12, 2021

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related