Executando scripts PHP automaticamente através da crontab no Linux

Introdução

Suponha que você desenvolveu um sistema para uma empresa e que em determinado momento, essa empresa solicitou a você, que este sistema necessite enviar determinados e-mails para seus clientes toda segunda-feira e o seu sistema deve realizar backups automáticos toda sexta-feira, às 23:00.

E agora? Como fazemos isso?

O que é cron

Pois bem, essa é a solução para o seu sistema! Cron pode ser interpretado como um serviço em sistemas operacionais Linux que permite programar a execução de scripts e comandos em determinados horários programados.

Para executar as tarefas, o cron usa uma espécie de tabela conhecida como crontab. O arquivo crontab geralmente fica localizado no diretório /etc, mas também pode estar em um diretório que cria um crontab para cada usuário do sistema (geralmente em /var/spool/cron/), tudo depende das configurações do sistema operacional utilizado.

Utilizando o cron

O primeiro passo é abrir o crontab. Para isso, você pode usar editores de textos do sistema ou através do comando crontab -e para editar o arquivo exclusivo de seu usuário. Neste caso, a edição é feita como se você estivesse usando o vi.

O crontab tem o seguinte formato:
[minutos] [horas] [dias do mês] [mês] [dias da semana] [usuário] [comando]

O preenchimento de cada campo é feito da seguinte maneira:
– Minutos: informe números de 0 a 59;
– Horas: informe números de 0 a 23;
– Dias do mês: informe números de 0 a 31;
– Mês: informe números de 1 a 12;
– Dias da semana: informe números de 0 a 7;
– Usuário: é o usuário que vai executar o comando (não é necessário especificá-lo se o arquivo do próprio usuário for usado);
– Comando: a tarefa que deve ser executada.

crontab

Repare que a ordem desses valores indica o nome correspondente do campo. Por exemplo, no campo mês, 1 a 12 quer dizer de “janeiro a dezembro”. No caso de dias da semana, 0 a 6 quer dizer de “domingo a sábado”. Note que o número 7 também pode ser usado. Neste caso, assim como o número 0, o 7 equivale ao dia de “domingo”. No lugar desses valores, você pode informar * (asterisco) para especificar uma execução constante. Por exemplo, se o campo dias do mês conter *, o comando relacionado será executado todos os meses.

Você também pode informar intervalos no preenchimento, separando os números de início e fim através de – (hífen). Por exemplo, se no campo horas for informando 2-5, o comando relacionado será executado às 2, 3, 4 e 5 horas.

E se o comando tiver que ser executado às 2 horas, entre 15 e 18 horas e às 22 horas? Basta informar 2,15-18,22. Nestes casos, você separa os parâmetros por vírgula.

Vamos a um exemplo:
#tarefa agendada
30 22 3,14 * * echo “Não entre em pânico” > /home/dirceu/log.txt

Neste exemplo, a frase “Não entre em pânico” é inserida no arquivo log.txt, dentro do diretório /home/dirceu/, às 22 horas e 30 minutos, nos dias 3 e 14, em todos os meses e em todos os dias da semana. Repare na linha “#tarefa agendada”. Trata-se de um comentário. Digite # e tudo o que for digitado na linha não será considerado pelo cron. É um recurso útil para inserir descrições quando se tem várias tarefas a serem executadas.

Comandos do crontab

Para acessar o crontab, basta digitar esse nome em um terminal seguido de um parâmetro. Eis a lista de parâmetros disponíveis:
crontab -e: conforme já informado, serve para editar o arquivo atual do crontab e criar um, caso não exista;
crontab -l: este comando mostra o conteúdo atual do crontab;
crontab -r: remove o arquivo atual do crontab.

Executando Scripts PHP em servidores Web via cron

Agora que você já aprendeu como utilizar a cron, como podemos executar os scripts de nossas aplicações?

Para executar os scripts PHP, basta informar o comando php /caminho/do/script na sua cron. Porém, como cada servidor possui configurações diferentes, nem sempre este comando é executado corretamente, principalmente em aplicações mais complexas e que usem o recurso “mágico” __autoload do PHP.

A KingHost por exemplo, possui uma interface bem legal, rápida e prática para gerenciar as tarefas agendadas pelo próprio painel de controle (apesar de cobrar R$ 5,00 por tarefa.. absurdo…). Já configurei diversas tarefas e não tive dificuldade alguma para tal.

Outros servidores, como a UOL Host, liberam acesso SSH para os clientes configurarem suas crons manualmente através de um terminal SSH de sua preferência (Recomendo o PuTTY). Neste caso, tive problemas para configurar algumas tarefas na cron devido ao recurso  __autoload citado. Felizmente, eis a solução:

wget www.seusite.com.br/seu_arquivo_cron.php

onde o comando wget faz a leitura do arquivo solicitado, salva uma cópia no seu servidor e exibe o conteúdo na tela. Porém, neste caso, não queremos a mensagem na tela e muito menos uma cópia do script php não é verdade? Então, vamos para a solução definitiva:

wget -q --delete-after www.seusite.com.br/seu_arquivo_cron.php

Onde o comando -q inibe a mensagem gerada pelo wget e o comando –delete-after exclui a cópia do arquivo criado.

SQL, sql server, sql server 2008, sql server 2008 R2, Oracle, Oracle Database, Oracle 11g, Oracle 10g, Oracle 12c, MySQL, Firebird, Consultoria, Consultor, Programador, Programação. Desenvolvedor, Analista de Sistemas, DBA, Criação de website, Criação de Sistema Web, Vitória, Vila Velha, Guarapari, Espírito Santo, ES, Consultoria SQL em VItória, Treinamento, Curso, Prestação de serviço, prestar serviço, freelancer, freela, banco de dados, consultoria em banco de dados, consultor de banco de dados

3 comentários em “Executando scripts PHP automaticamente através da crontab no Linux

Deixe uma resposta