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>
- 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 } }
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>
- 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
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}"
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}
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
Top comments (1)
Uau, tudo bem completinho com uma pitada de exercício para treinar e entender o que você está fazendo.