Uma tarefa cron que não roda ou não envia nada: lista de verificação

Automação e n8n··· 442 visualizações· 4 min de leitura

Quase sempre a tarefa cron corre, mas falha por uma de seis razões: caminho incompleto, um sinal % sem proteção, a versão do PHP errada, um script sem permissão, a hora do servidor, ou saída descartada. Percorra a lista por ordem; a primeira que encontrar costuma ser a causa. Se ainda não criou a tarefa, comece por tarefas cron: para que servem e como criar uma.

Primeiro, saber se corre

1 Acrescente um registro. No fim do comando ponha >> /home/CONTA/cron.log 2>&1. Passa a guardar tudo o que o comando escreve, erros incluídos.
2 Ponha o seu e-mail no campo de notificação da página das tarefas, e deixe de fora o >/dev/null enquanto testa. Se receber a mensagem, a tarefa arrancou.
3 Agende para daqui a poucos minutos. Na hora do servidor, que pode não ser a sua: escreva date no Terminal do cPanel (se a conta o tiver) para ver a hora. Depois de testar, volte ao horário normal.
4 Rode o mesmo comando à mão, no Terminal, copiado da linha da tarefa. Se falhar aí, o erro aparece na tela e a causa está no comando, não no cron.

As causas, por ordem de frequência

Sintoma Causa provável O que fazer
Funciona no Terminal, não no cron O cron não inicia na pasta do seu site e tem muito poucas variáveis de ambiente. Use caminhos completos para tudo, desde /home/CONTA/. No PHP, use __DIR__ nos require.
A tarefa com date +%F ou %Y falha No cron, o sinal % significa fim de linha. Escreva \%. Exemplo: date +\%F.
Erros de extensão ou de versão A tarefa usa outra versão do PHP que o site. Chame o PHP da versão que o site usa, ou veja a extensão em Select PHP Version.
«Permission denied» num script .sh O arquivo não é executável. Corra-o com /bin/bash /home/CONTA/scripts/x.sh, ou dê-lhe permissão de execução.
«bad interpreter» ou erros estranhos no .sh O arquivo foi gravado com fins de linha de Windows. Grave de novo com fins de linha Unix (LF) no editor.
Roda a uma hora que não esperava O servidor tem a sua hora, e pode não ser a sua. Ajuste o horário à hora do servidor. Veja a hora do servidor.
Não recebe e-mail nenhum A saída vai para /dev/null, ou o campo de notificação está vazio. Tire o >/dev/null até confiar na tarefa.
Uma tarefa silenciosa que nunca funcionou parece igual a uma que funciona. Faça sempre o script deixar uma prova, como uma linha com a data num arquivo ou numa tabela. É a única forma de saber que não só arrancou como chegou ao fim.

Se o script depende de muita memória ou de muito tempo, pode ser interrompido pelos limites da conta e deixar apenas uma linha de erro no log de erros do PHP. Veja onde está o log de erros do PHP. Se o disco da conta estiver cheio, o script também não consegue gravar nada.

Antes de agendar, rode o comando uma vez à mão e confirme que faz o que quer. Só depois o ponha no cron. Uma tarefa nova que falha a primeira vez costuma falhar por um detalhe do comando e não por causa do cron.

A tarefa continua a não rodar? Envie-nos a linha completa e o domínio, e dizemos-lhe o que o cron fez. Tenha em conta que o conteúdo do script é seu.

Abrir um pedido

VEJA TAMBÉM

Tarefas cron: para que servem e como criar uma

Rodar um script PHP a partir de uma tarefa cron

Até onde vai o nosso suporte

Política de Suporte

PRODUTO RECOMENDADO

Hospedagem de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde R$ 36,30/mês (plano de 3 anos, com cupom)

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.