Posts com a Tag ‘Cron’
Como funciona o sistema de Cron do Magento
quarta-feira, 11 de agosto de 2010O termo Cron vem da funcionalidade de agendamento de tarefas no Unix. No Magento o seu proposito é o mesmo. É importante deixar o Cron configurado pois ele é responsável por manter a loja funcionando de forma correta.
Periodicamente scripts do Magento precisam ser executados para executar tarefas como:
- Reindexar preços de catálogo(melhora performance de busca)
- Enviar newsletters
- Gerar o Google Sitemap
- Alertar usuários de mudanças de preço ou estoque
- Atualizar automaticamente cotação de moedas estrangeiras
- Fazer limpeza de logs no banco de dados
- Executar periodicamente tarefas que você desenvolveu no seu módulo, etc.
Gastei um tempo para tentar entender como funciona exatamente o sistema de Cron, pois é bastante confuso. Em algumas documentações eu vi que deveria agendar o cron.php para rodar, em outras me diziam que isso deveria ser feito pela administração. Com um tempo de estudo entendi como funciona e vou explicar agora.
Agendamento de tarefas dos módulos
Cada módulo do Magento possui seu próprio agendamento. Nem todos os módulos vão rodar sempre no mesmo horário. Vamos tomar como exemplo o módulo de Newsletter.
Para que este módulo envie as newsletters programadas no dia e horário configurado pelo administrador é necessário que algum script seja executado em determinado período. Para fazer essa configuração o arquivo config.xml do módulo possúi a seguinte configuração:
<config>
<!-- ... -->
<crontab>
<jobs>
<newsletter_send_all>
<schedule><cron_expr>*/5 * * * *</cron_expr></schedule>
<run><model>newsletter/observer::scheduledSend</model></run>
</newsletter_send_all>
</jobs>
</crontab>
<!-- ... -->
</config>
A expressão */5 * * * * significa que o script deverá rodar todo dia a cada 5 minutos. A notação é a mesma utilizada no crontab do Linux. Já a reindexação de preços possui a expressão 0 2 * * * que significa que rodará todos os dias as 2:00 a.m.
Como o magento gerencia as tarefas
Para o Magento gerenciar essas tarefas ele possui uma tabela especifica chamada cron_schedule. Dentre as colunas da tabela há as que se destacam:
- job_code: código do processo a ser executado
- status: status da tarefa
- scheduled_at: data e hora em que a tarefa está prevista para ser executada
Tomando ainda de exemplo o módulo de Newsletter, teremos na tabela cron_schedule os valores:
![]()
Essa linha informa que o processo newsletter_send_all, ou seja os envios de Newsletters será executado às 14:35 do dia 06/08/2010. Uma vez executado o status muda para "success". De acordo com que o arquivo cron.php for rodando ele criará mais registros como esse agendando a tarefa para 14:40, 14:45, 14:50, etc.
Na raíz do Magento há um arquivo chamado cron.php. Este arquivo é responsável por gerenciar toda a parte de agendamento. Ele criar os agendamentos na cron_schedule, roda as tarefas em seus devidos horários, limpa tarefas antigas, etc. Ele deve ser executado periodicamente para fazer a gerência de tarefas. Você pode configurá-lo dentro do seu servidor utilizando o Crontab(Linux) ou o Agendador de Tarefas(Windows). Se você não puder fazer essa configuração no seu servidor ou seu serviço de hospedagem não da suporte você pode optar por usar serviços on-line como o http://cronless.com/ ou o http://www.onlinecronjobs.com/.
Eu recomendo que este arquivo seja chamado a cada 5 minutos. Assim fica mais difícil tarefas serem executados fora do horário previsto ou até mesmo causar uma sobrecarga de tarefas sendo executadas, por exemplo, seu arquivo foi executado na ultima vez às 14h e você configurou para ele ser chamado a cada 30 minutos, logo a próxima vez que ele rodar será às 14:30. Todos os processos que foram agendados para rodar entre 14 e 14:30 vão ser executados todos de uma vez às 14:30.
Configurações de execução de cron no Magento
O Magento possúi algumas configurações relacionadas aos agendamentos de tarefa. Se você for em Admin > System > Configuration > System > Cron(na versão inglẽs) verá as seguintes opções:
- Generate schedules every
Tempo(em minutos) em que será gerado na tabela cron_schedule um registro com agendamento de tarega. Exemplo: Se esta opção está setada com o valor 15 e o cron.php rodou pela última vez às 14h então só será gerado registros de agendamento às 14:15. Se o cron.php rodar às 14:10 nada fará além de executar tarefas agendadas naquele horário. Valor recomendado: 60. - Schedule ahead for
Será gerada tarefas até x minutos a frente. Exemplo: se este valor está setado para 10, o cron.php roda às 14h e a tarefa deve ser rodado de 5 em 5 minutos, será gerado na tabela cron_schedule tarefas para às 14:00, 14:05 e 14:10. Valor recomendado: 15. - Missed if not run within
Tempo em minutos em que uma tarefa será considerada perdida. Exemplo: Se estiver configurado com o valor 3, a tarefa está programada para rodar às 14h o arquivo cron.php deve rodar até as 14:03 ou então esta tarefa não rodará mais e seu status mudará para "missed". Valor recomendado: 60. - History cleanup every
Tarefas executadas ou perdidas serão limpas a cada x minutos. Valor recomendado: 120. - Success history lifetime
Registros de tarefas executadas com sucesso ficará por até x minutos após sua execução. Valor recomendado: 120. - Failure history lifetime
Registros de tarefas executadas e falharam ficará por até x minutos após sua execução. Valor recomendado: 120.
Últimos posts comentados