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.
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:
1 |
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:
1 |
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.
Olá quero criar uma cron. para rodar um script para stop/start no meu servidor todos dias a partir das 5:30 da manha poderia me ajuda
Muito bom, porém uma duvida me surgiu,
Como eu faria para programar o cron para executar uma pagina especifica de 15 em 15 minutos de forma constante?
Belita, você pode fazer isso dessa forma:
*/15 * * * * comando_a_ser_executado
Obrigada, vou testar.