Uma tarefa agendada, ou cron, é uma ordem que o servidor executa a horas certas, esteja você lá ou não, tenha o site visitas ou não. É das funcionalidades que mais gente tem e menos gente sabe que tem, e é a explicação para metade dos «isto devia ter acontecido sozinho e não aconteceu».
Para que serve, na prática
| Quem precisa |
Do quê |
| O WordPress |
Publicações agendadas, verificação de actualizações, limpeza da lixeira e os e-mails que os plugins mandam. Tudo isso passa pelo agendador interno dele. |
| Lojas online |
Sincronizar stock, fechar carrinhos abandonados, emitir facturas, enviar o e-mail de «a sua encomenda saiu». |
| Os seus próprios scripts |
Importar um ficheiro que um fornecedor deixa todas as noites, apagar ficheiros temporários, gerar um relatório às 7 da manhã. |
| As suas cópias |
Um script que exporta a base de dados e a manda para fora do servidor. A cópia que ninguém se lembra de fazer à mão é a que uma tarefa agendada faz sem falhar. |
O caso do WordPress, que vale por si
O agendador do WordPress não é um cron: é um ficheiro que só corre quando alguém visita o site. Num site com muitas visitas isso quase não se nota. Num site institucional que recebe meia dúzia de visitas por dia, as tarefas ficam à espera e depois disparam todas ao mesmo tempo, em cima do visitante seguinte, que fica à espera que a página abra.
A cura é tirar-lhe o trabalho: desliga-se o agendador interno e cria-se uma tarefa agendada a sério, com hora. Acrescenta-se ao wp-config.php , antes da linha que diz para parar de editar:
define( 'DISABLE_WP_CRON', true );
e depois cria-se a tarefa no painel, a chamar o wp-cron.php de tempos a tempos. De cinco em cinco minutos chega para quase todos os sites.
|
Desligar sem criar a tarefa é pior do que não mexer. Se põe a linha no wp-config.php e se esquece do resto, as publicações agendadas deixam de sair, os e-mails da loja deixam de ser enviados e nada dá erro. Faça as duas coisas na mesma sessão, ou nenhuma.
|
Como se cria
| 1 |
No cPanel, na secção Avançado, abra as tarefas agendadas (cron). Se não vir o ícone, escreva cron na caixa de pesquisa do topo do painel.
|
|
| 2 |
Escolha a periodicidade. Há uma lista de opções comuns (de hora a hora, uma vez por dia, uma vez por semana) que preenche os campos por si. Só precisa dos cinco campos se quiser uma hora que não esteja na lista.
|
|
| 3 |
Escreva o comando. É a linha que o servidor vai executar, com caminhos completos. O cron não sabe em que pasta você estava nem conhece os atalhos do seu terminal.
|
|
| 4 |
Guarde e ponha um e-mail seu no campo de notificação, no topo da página. Nos primeiros dias quer receber o que a tarefa escreve, para saber se corre.
|
|
| Campo |
O que é |
| Minuto |
0 a 59. 0 é à hora certa. |
| Hora |
0 a 23, na hora do servidor, que pode não ser a sua. Confirme antes de agendar coisas à meia-noite. |
| Dia do mês |
1 a 31. * quer dizer «todos». |
| Mês |
1 a 12. |
| Dia da semana |
0 a 6, começando no domingo. |
Os cinco lidos em conjunto: */5 * * * * é de cinco em cinco minutos, 30 4 * * * é todos os dias às 4h30, e 0 6 * * 1 é às 6h de todas as segundas-feiras.
|
Duas maneiras de chamar a mesma coisa. Um script PHP pode ser executado directamente pelo interpretador, com o caminho completo do PHP e o caminho completo do ficheiro, ou pedido como se fosse uma página, com wget ou curl . A primeira é mais rápida e não passa pela web; a segunda é a que os plugins costumam pedir. Se a aplicação lhe der a linha pronta, use a dela.
|
Porque é que de minuto a minuto é má ideia
Parece inofensivo e não é. Cada execução arranca um processo, e o processo conta para os limites da sua conta como conta uma visita. Sessenta arranques por hora, 1440 por dia, todos os dias, a competir com os visitantes reais pelos mesmos recursos.
|
E há o empilhamento. Se a tarefa demora mais de um minuto a terminar, a seguinte arranca antes de a anterior acabar. Depois a terceira. Ao fim de uma hora tem dezenas de cópias do mesmo script a correr ao mesmo tempo, muitas vezes a mexer nos mesmos dados. O sintoma é o site lento sem razão aparente, e o culpado é a tarefa que «não faz nada». De cinco em cinco minutos resolve praticamente tudo o que as pessoas agendam ao minuto.
|
Como se vê se correu
| 1 |
Pelo e-mail. Por omissão, tudo o que a tarefa escreve no ecrã é enviado para o endereço que indicou. Se recebe o e-mail, correu. Se não recebe nada e a tarefa devia escrever alguma coisa, não correu.
|
|
| 2 |
Por um ficheiro de registo. Acrescente ao fim do comando >> /home/utilizador/cron.log 2>&1 , trocando o caminho pelo seu. Passa a ter a saída e os erros guardados, com histórico, sem encher a caixa de correio.
|
|
| 3 |
Pela própria tarefa. Faça o script gravar a data e o resultado numa tabela ou num ficheiro. É a única prova de que ele não só arrancou como chegou ao fim.
|
|
| 4 |
Pelos Erros. Na secção Métricas do cPanel, os erros do PHP aparecem também quando quem corre o script é o cron e não um visitante.
|
|
|
Quando já confia nela, cale-a. Acrescentar >/dev/null 2>&1 ao fim do comando manda a saída para o lixo e deixa de lhe encher a caixa todos os dias. Faça isso depois de a ver correr, nunca antes: uma tarefa silenciosa que nunca funcionou é indistinguível de uma que funciona.
|
|
Os três enganos de sempre. Caminhos relativos (o cron não começa na pasta do seu site); o interpretador errado (a tarefa corre numa versão de PHP e o site noutra, e aí faltam extensões); e a hora do servidor, que pode não ser a sua. Sobre esta última, veja o artigo «A que horas está o servidor, e porque é que o PHP e o MySQL podem discordar».
|
PRODUTO RECOMENDADO Alojamento de sites com cPanel Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 600,00 MT/mês Ver planos |