Cron no PrestaShop: tarefas agendadas bem feitas
Subscrições, feeds do Google, sincronização com o ERP: muitas coisas dependem de um cron. Mostramos como configurá-los para que não falhem em silêncio.
Muitas funções de uma loja não são disparadas por um cliente, mas pelo relógio: cobrar as renovações de subscrições, regenerar o feed do Google Shopping, sincronizar o stock com o ERP, limpar carrinhos. É para isso que servem as tarefas cron.
Duas formas de as lançar
Por URL
*/15 * * * * curl -s "https://tienda.com/module/mimodulo/cron?token=XXXX" > /dev/null
Simples e funciona em qualquer alojamento, mas a tarefa fica sujeita aos limites do servidor web (tempo de execução, cache de página, firewall).
Por linha de comandos
*/15 * * * * cd /var/www/tienda && php modules/mimodulo/cron.php >> var/logs/cron-mimodulo.log 2>&1
Sem os limites do servidor web e com registo próprio. É a opção preferível quando há SSH.
Segurança
- Qualquer URL de cron deve levar um token longo e aleatório, e verificá-lo antes de fazer o que quer que seja.
- Nunca ponha o token numa ligação pública nem no robots.txt.
- Se a tarefa faz cobranças ou envia e-mails, que seja idempotente: executá-la duas vezes não deve cobrar duas vezes.
Que não falhem em silêncio
- Guarde um registo com a data, o que fez e quanto tempo demorou.
- Guarde a data da última execução correta e mostre-a no back office do módulo.
- Avise (e-mail, Telegram, Slack) se uma tarefa crítica estiver há demasiado tempo sem correr.
Frequências razoáveis
| Tarefa | Frequência |
|---|---|
| Renovações de subscrições | Uma ou várias vezes por dia |
| Sincronização de stock | A cada 5–15 minutos |
| Feeds de produtos | Uma vez por dia |
| Limpeza de dados | Uma vez por semana ou por mês |