Agendando tarefas no Magento com Cron em Módulos

No Magento há muitas tarefas que são executadas rotineiramente e para isso existe o agendador de tarefas chamado o cron.

Para quem ainda não entende bem o é o cron, segue um link Entendendo o que é o Cron.

O Magento tem um gerenciador de tarefas próprio.

Com ele é possível especificar um cron interno para cada módulo ou rotina.

Explicando forma simplista, para que o agendador interno do Magento funcione, temos que rodar a rotina do Magento que inicializa a verificação tudo que deve ser feito e que está agendado.

Portanto temos que fazer com que o cron do sistema rode o cron do Magento de “tempos em tempos”.

Configurando o Cron do sistema para rodar o Cron do Magento

Utilizando o comando crontab no shell do servidor, você pode editar as rotinas agendas do sistema.

Talvez você não tenha acesso ao shell em seu servidor e você poderá fazer isso via cPanel ou outro painel de controle.

Você deve rodar o cron a cada 5 minutos, logo, se você já está familiarizado como funciona o agendador cron, utilize a seguinte regra de tempo:

t*/5 * * * *

Essa regra também pode ser escrita de outra forma, como: 0,5,10, … ,55.

Quanto ao que deve ser executado, você deve utilizar uma das formas abaixo:

*/5 * * * * /bin/sh /[magento_path]/cron.sh
*/5 * * * * /bin/bash /[magento_path]/cron.sh
*/5 * * * * /usr/bin/php /[magento_path]/cron.php
*/5 * * * * /usr/local/bin/php -f /[magento_path]/cron.php

Eu particularmente prefiro executar via shell script já que nele há algumas verificações adicionais antes de chamar internamente o cron.php.

Logo saiba que ao usar qualquer uma das formas acima, o sistema sempre executará o arquivo php.

Como criar minhas rotinas dentro do Magento (em Módulos)

É comum na criação de customizações e módulos (extensões) no Magento surgir a necessidade de criar rotinas que devem ser executadas em períodos fixos de tempo.

Para fazer isso, o config do seu módulo deve conter a marcação de crontab.

<config>
...
<crontab>
 <jobs>
 <namespace_module>
 <schedule>
 <cron_expr>0,15,30,45 * * * *</cron_expr>
 </schedule>
 <run>
 <model>modulo/model::método</model>
 </run>
 </namespace_module>
 </jobs>
</crontab>
...
</config>

Podemos ver acima que podemos especificar um ou mais jobs. Cada job é referente a um agendamento de uma rotina.

Na marcação schedule temos o horário de execução e na marcaçao run o que será executado em si, no caso, um método do model.

Debugar execução das tarefas agendadas

Debugar rotinas que são executadas através do agendador de tarefas ou mesmo ver se tudo está ocorrendo como deveria pode ser complicado dependo dos parâmetros de tempo da configuração.

Para essas tarefas existe a incrível extensão do Fabrizio Branca, o Magento Cron Scheduler.

Com ele é possível verificar graficamente os agendamentos, horários, histórico de agendamento (inclusive com o status de execução) e ativar, desativar e executar as rotinas agendas para testá-las ou qualquer outro fim.

Espero ter abordado de forma simples, para quem já conhece o que é e como funciona o crontab, como agendar rotinas para construção de suas customizações no Magento.

[toggle title=”Fonte”]
http://denisspalenza.com/
[/toggle]

2013-07-12T14:24:09+00:00