Capítulo 15 · 15.1
Tarefas Cron Jobs: executar tarefas automaticamente
Veja num pequeno vídeo
Uma tarefa Cron (ou Cron Job) é uma instrução que o servidor executa para si em horários fixos. Por exemplo, todas as noites um script que limpa dados antigos, de hora a hora uma ligação com a sua contabilidade, ou as tarefas agendadas do WordPress ou do Laravel. Configura isto em Tarefas Cron Jobs, em Recursos Avançados.

Regras na WebOké
Um servidor é partilhado com outros sites. Por isso, existem regras para as tarefas Cron:
- Deixe uma tarefa iniciar no máximo uma vez a cada 10 minutos. Pedimos isto a todos os clientes. O servidor não impõe esta regra, mas uma tarefa que seja executada com mais frequência torna o servidor mais lento para si e para os outros. Se tiver várias tarefas, não as agende todas para o mesmo momento.
- Mantenha uma tarefa curta. Se for necessário processar muito trabalho, divida-o por várias execuções.
Criar uma tarefa
- No DirectAdmin, clique em Recursos Avançados e depois em Tarefas Cron Jobs.
- Clique em CRIAR UMA NOVA TAREFA CRON.
- Preencha em Minuto, Hora, Dia do mês, Mês e Dia da semana quando a tarefa deve ser executada (1). Um asterisco * significa "todos" ou "todas".
- Por baixo dos campos de tempo, em O agendamento (Cron Job) será executado: (2), vê em linguagem simples quando a tarefa é executada. Verifique se está correto.
- Em Comando (3), introduza o que deve acontecer, com caminhos completos (ver abaixo).
- Não quer receber um e-mail de cada vez? Clique em EVITAR E-MAILS (4).
- Clique em CRIAR (5).

A tarefa fica depois visível na lista. Para a eliminar, assinale a caixa correspondente (1) e clique em Eliminar.

Exemplos de horários
| Minuto | Hora | Dia do mês | Mês | Dia da semana | Significado |
|---|---|---|---|---|---|
| 30 | 3 | * | * | * | Todos os dias às 03:30 |
| */10 | * | * | * | * | A cada 10 minutos |
| 0 | * | * | * | * | A cada hora certa |
| 15 | 8 | * | * | 1-5 | Nos dias úteis às 08:15 (1 é segunda-feira, 0 ou 7 é domingo) |
| 0 | 2 | 1 | * | * | No primeiro dia de cada mês às 02:00 |
Pode separar valores com vírgulas (1,15,30), indicar um intervalo com um hífen (5-7) e um período com */ (*/2 significa a cada dois). Opte, de preferência, por um horário tranquilo e aleatório, como as 03:17 em vez da meia-noite exata.
O comando: caminhos completos
Uma tarefa Cron não sabe em que pasta deve começar. Por isso, utilize sempre caminhos completos. O seu pacote está localizado no servidor em /home/ seguido do seu nome de utilizador DA (ver Encontrar o nome do seu servidor e o nome de utilizador DA).
Iniciar um script PHP:
/usr/local/bin/php /home/nomedeutilizador/domains/oseudominio.nl/public_html/tarefa.php
Isto utiliza a mesma versão de PHP do seu site, ou seja, a versão definida em Select PHP version (ver Escolher a versão do PHP (Select PHP version)).
Chamar um endereço web (por exemplo, se o seu software fornecer um URL de Cron):
curl --silent https://www.oseudominio.nl/cron.php > /dev/null
WordPress: por predefinição, o WordPress inicia as suas tarefas agendadas quando chega um visitante. Num site com muito tráfego ou num site com pouco tráfego, é preferível fazer isto através de uma tarefa Cron. Nesse caso, coloque em wp-config.php define('DISABLE_WP_CRON', true); e crie uma tarefa que execute a cada 15 minutos /usr/local/bin/php /home/nomedeutilizador/domains/oseudominio.nl/public_html/wp-cron.php.
Laravel: /usr/local/bin/php /home/nomedeutilizador/domains/oseudominio.nl/artisan schedule:run. Atenção: schedule:run apenas executa tarefas que coincidam exatamente com o momento do agendamento Cron. Se o Cron for executado a cada 10 minutos, uma tarefa agendada para as 08:05 nunca será executada.
E-mail após cada tarefa
Se uma tarefa gerar retorno (texto ou uma mensagem de erro), o servidor pode enviá-lo por e-mail. Isto só acontece se tiver configurado um endereço. Tem três opções:
- E-mail para um endereço próprio: clique em ENVIAR O RETORNO DO CRON PARA O E-MAIL, introduza um endereço de e-mail e clique em GUARDAR. Isto aplica-se a todas as suas tarefas. Se deixar o campo em branco, não será enviado nenhum e-mail.
- Sem e-mail para uma tarefa específica: ao criar a tarefa, clique em EVITAR E-MAILS. Assim, é acrescentado >/dev/null 2>&1 ao final do comando e o retorno dessa tarefa não é enviado, mesmo que tenha configurado um endereço.
- Retorno num ficheiro de registo: acrescente ao final do comando >> /home/nomedeutilizador/cron-log.txt 2>&1. Assim, pode consultar mais tarde no Gerenciador de arquivos o que a tarefa fez. Limpe esse ficheiro de vez em quando.

Dica: Configure um endereço enquanto estiver a testar uma nova tarefa. Assim, sabe imediatamente se está a funcionar. Depois, desative-o ou envie o retorno para um ficheiro de registo. Os e-mails das tarefas Cron contam para o limite de envio do seu pacote (ver Verzendlimieten en de melding 'message limit reached').
Perguntas frequentes
A minha tarefa apresenta "Could not open input file".
O caminho para o script está incorreto. Verifique o caminho completo no Gerenciador de arquivos: deve começar com /home/nomedeutilizador/domains/.
O meu script funciona no navegador, mas não como tarefa Cron.
Um script executado através de Cron não sabe sob que site está a ser executado: $_SERVER['SERVER_NAME'] e $_SERVER['DOCUMENT_ROOT'] ficam vazios e os caminhos relativos em include funcionam de forma diferente. Utilize caminhos completos no script, ou chame o script através de curl com o endereço web.
Consigo ver quando uma tarefa foi executada?
O DirectAdmin não regista isso por si. Por isso, faça com que a tarefa escreva o seu retorno num ficheiro de registo, incluindo a data (por exemplo, date >> /home/nomedeutilizador/cron-log.txt como primeiro comando, separado por ;).
O que faz a opção Executar tarefa ao reiniciar (@reboot)?
Nesse caso, a tarefa só é executada quando o servidor reinicia, e não em horários fixos. Isto raramente é necessário num site.
