Cursos Magento

Como criar uma tarefa agendada (cronj) no Magento em 2 passos

,

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 pasta Cron
  • <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:

Expressão Cronjob

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á.

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/criar-tarefa-agendada-cronjob/"]