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

Quase sempre a tarefa cron corre, mas falha por uma de seis razões: caminho incompleto, um sinal % sem protecção, a versão do PHP errada, um script sem permissão, a hora do servidor, ou saída deitada fora. 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 registo. 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 Corra o mesmo comando à mão, no Terminal, copiado da linha da tarefa. Se falhar aí, o erro aparece no ecrã 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 arranca 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 ficheiro 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 ficheiro foi gravado com fins de linha de Windows. Grave de novo com fins de linha Unix (LF) no editor.
Corre 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 ficheiro 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 registo de erros do PHP. Veja onde está o registo de erros do PHP. Se o disco da conta estiver cheio, o script também não consegue gravar nada.

Antes de agendar, corra 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 correr? 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

Correr um script PHP a partir de uma tarefa cron

Até onde vai o nosso suporte

Política de Suporte

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 321,75 MT/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?