Como criar uma tarefa agendada (cronj) no Magento em 2 passos
Desenvolvimento, Magento 2
Publicado em 13 de setembro de 2022
Neste artigo veremos como criar uma tarefa para ser executada pelo cron do Magento. Ou seja, durante o desenvolvimento de módulos para Magento, podemos definir um método para ser executado em determinado horário, ou de forma recorrente.
Isto é útil especialmente nos casos de integração de estoque ou outras integrações que você precise fazer em sua loja.
Primeiro Passo: Criar o crontab.xml
Crie um arquivo chamado crontab.xml
na pasta <seu_modulo>/etc/crontab.xml
. Caso não tenha um módulo criado ou não saiba como criar um, veja como criar um módulo básico para Magento 2.
<?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="<nome do grupo>"> <job name="<nome da tafera>" instance="<classe>" method="<método>"> <schedule><expressão do cron></schedule> </job> </group> </config>
Substitua os parâmetros conforme explicado abaixo:
- <nome do grupo> – nome do grupo do cronjob. Não precisa ser único, mas você só pode executar um grupo por vez. Se não for criar um grupo seu, coloque
default
. - <nome da tarefa> – identificador único desta tarefa. Não deve ter nenhuma outra com mesmo nome. Ex:
mymodule_send_inventory
- <classe> – nome completo da classe onde está o método que deseja executar. Ex:
RicardoMartins\PagSeguro\Cron\UpdatePendingOrderStatus
. Tipicamente classes de cron são colocadas na pastaCron
- <método> – nome do método que deseja executar. Ex:
sendToErp
- <expressão do cron> – composto por uma string com 5 parâmetros. Falaremos mais sobre ela abaixo. Ex:
* * * * *
para executar este método a cada minuto.
Exemplo Crontab Magento
Veja um exemplo final do módulo PagSeguro para Magento 2.
<?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 instance="RicardoMartins\PagSeguro\Cron\UpdateProductInstallmentValues" method="execute" name="rm_pagseguro_updateinstallments"> <schedule>*/5 * * * *</schedule> </job> <job instance="RicardoMartins\PagSeguro\Cron\UpdatePendingOrderStatus" method="execute" name="rm_pagseguro_updatependingorderstatus"> <schedule>*/5 * * * *</schedule> </job> </group> </config>
No exemplo temos 2 métodos, de duas classes diferentes, executados a cada 5 minutos. Eles são responsáveis por atualizar informações de parcelamento e de pedidos pendentes, porém outras condições mais avançadas para determinar sua execução é realizada dentro dos próprios métodos.
Expressão do Cron – Como funciona
A expressão cron do Magento segue o padrão universal, ou seja, o mesmo usado no comando crontab -e
do linux/mac.
Ele é composto de 5 valores, da seguinte forma:
Veja alguns exemplos de expressões cron que facilitarão o entendimento:
- * * * * * é executado a cada minuto
- */5 * * * * é executado a cada 5 minutos
- 0 * * * * é executado aos 0 minutos de cada hora, ou seja, de hora em hora
- 0,30 * * * * é executado aos 0 e aos 30 minutos de cada hora
- 0 3 20 12 * é executado às 3 da manhã do dia 20 de Dezembro de todos os anos
Para explorar outras opções, use o site crontab generator e digite ls
no campo de comando, apenas para gerar alguma coisa.
Segundo passo: Criar sua classe e método
A parte mais complexa – se é que existe uma neste caso – está no XML do passo 1.
Contanto que sua classe seja criada no lugar que você definiu lá, e exista o método público que mencionou, tudo funcionará bem.
A classe e método a ser executado não precisam estender nenhuma outra classe, e podem utilizar injeção de dependência livremente.
E como falado anteriormente, por convenção, a classe deve ser colocada dentro da pasta Cron
do módulo que a define.
Como testar meu cron no Magento?
Para ver se o cron está configurado e sendo executado, verifique o arquivo cron.log
localizado na pasta var/log
de sua loja.
Para testar se um comando que acabou de criar está de fato funcionando, costumo usar o n98-magerun2. Ele é uma das 10+ ferramentas que demonstro no curso de criação de módulos para Magento 2.
Trata-se de um executável php (.phar) que você executa sempre à partir da pasta de sua instalação Magento.
Basta digitar ./n98-magerun.phar cron:run <id_do_cron
>, onde o id do cron deve ser substituído pelo nome da tarefa que você definiu no crontab.xml
.
Gostou deste artigo?
Te convido a fazer parte do Clube Magenteiro. Ao fazer parte deste grupo exclusivo, você ganha acesso à todos os cursos e conteúdo publicados no Magenteiro.
Além disso, ainda poderá fazer parte de grupos exclusivos de alunos onde trocamos experiências, dicas, oportunidades de trabalho, e muito mais.
Te espero lá.
- PagSeguro (PagBank) para Magento 1 recebe a Nova Geração - 9 de abril de 2024
- Recorrência no WooCommerce Sem Plugins Pagos - 28 de janeiro de 2024
- Chargeback. O que é, e como se livrar deles. - 19 de dezembro de 2023
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-2/criar-tarefa-agendada-cronjob/"]