Correr um script PHP numa tarefa agendada (cron)

Em Cron Jobs, no cPanel, o comando é o caminho completo do PHP, um espaço, e o caminho completo do script: /opt/alt/php82/usr/bin/php /home/SUACONTA/scripts/tarefa.php. Duas coisas dão cabo da maioria das tarefas que “não correm”: caminhos relativos e o PHP errado. Para o que é o cron em si, veja tarefas agendadas.

Montar a tarefa

1 Guarde o script fora da pasta pública, por exemplo numa pasta scripts ao lado de public_html. Um script de tarefas dentro do site pode ser chamado por qualquer pessoa pelo navegador.
2 Escolha o PHP. O caminho tem a forma /opt/alt/php82/usr/bin/php, trocando 82 pela versão do projecto (sem o ponto). Não escreva só php: o cron pode usar outra versão que não a da sua pasta.
3 No cPanel, secção Advanced, abra Cron Jobs. Escolha a frequência e cole o comando completo.
4 Guarde o resultado num ficheiro. Acrescente no fim >> /home/SUACONTA/scripts/tarefa.log 2>&1. Sem isto, o cPanel envia a saída por e-mail ou perde-a.
5 Espere pela primeira execução e abra o ficheiro de registo. Se estiver vazio e o script devia escrever algo, a tarefa não correu.

Uma linha completa fica assim:

/opt/alt/php82/usr/bin/php /home/SUACONTA/scripts/tarefa.php >> /home/SUACONTA/scripts/tarefa.log 2>&1

O que muda entre o navegador e o cron

No navegador No cron
Há um pedido web: $_SERVER, $_GET e os cabeçalhos existem. Não há pedido nenhum. Essas variáveis vêm vazias ou nem existem.
A pasta de trabalho é a do script. A pasta de trabalho é outra. Use __DIR__ nos caminhos de require e de ficheiros.
Há um tempo máximo por pedido. Na linha de comandos o limite de tempo costuma ser maior, mas a memória e os limites da conta continuam a valer.
A configuração é a da pasta. A configuração é a do PHP de linha de comandos dessa versão. Um valor posto só no .user.ini da pasta do site pode não valer aqui.
A hora é a do servidor, fuso Africa/Maputo (UTC+02:00). Uma tarefa “às 8” corre às 8 nessa hora, que pode não ser a sua. Um % dentro do comando tem de se escrever \% ou o cron corta a linha: ponha a lógica com datas dentro do script.
Não faça uma tarefa por minuto “só para ver”. Cada execução gasta processos e memória da conta (veja os limites). Escolha a frequência que o trabalho pede e meça o tempo que o script leva.
Teste primeiro à mão. No Terminal corra a mesma linha, sem o cron. Se der erro aí, dá erro no cron. Se o script chamar o WordPress, veja trocar o WP-Cron por uma tarefa a sério.

A tarefa foi criada, o ficheiro de registo diz um erro e não percebe qual? Envie-nos a linha do cron e o texto do registo.

Abrir um pedido de suporte

VEJA TAMBÉM

Tarefas agendadas: para que servem e como criar uma

Trocar o WP-Cron por uma tarefa agendada a sério

O Terminal do cPanel

Cópias automáticas da sua aplicação: cron e mysqldump

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

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

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