Unidade 9 – Cron
Suponha que você seja dono de um serviço de hospedagem de sites e diariamente precisa
disponibilizar, numa pasta acessível por FTP, o arquivo de log de acessos de um cliente. É trabalhoso fazer
isso manualmente e, na pior das hipóteses, você pode esquecer. Felizmente o Linux conta com o serviço
cron, que permite a realização de tarefas periodicamente e em dias e datas determinados por você. Na aula
de hoje, falaremos sobre como o agendamento de tarefas no Linux utilizando o cron.
8.1. O que é cron
O cron pode ser interpretado como um serviço do Linux que é carregado durante o processo de boot
do sistema. Trata-se de uma ferramenta que permite programar a execução de comandos e processos de
maneira repetitiva ou apenas uma única vez.
No caso citado da introdução, você poderia usar o cron para que o arquivo de log do cliente fosse
disponibilizado todos os dias às 12 horas, por exemplo. Isso é possível porque o daemon do cron executa os
comandos nas datas e horários especificados. A cada minuto o cron é acionado para verificar se há tarefas a
serem realizadas. Existem varias situacoes em que o uso do cron facilita a nossa vida. Abaixo, algumas
situacoes comuns em que usamos o cron:
●
●
●
●
●
checar a integridade dos sistemas de arquivo todos os dias as 5:00 AM e mandar mail do resultado
para o root;
verificar se há mail em suas contas pop a cada 15 minutos
rodar o updatedb todos os dias às 00:30
todas as quintas-feiras, às 3:00 AM, procurar por arquivos core desnecessários e excluí-los
e muito mais
8.1. crontab
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/.
O primeiro passo para se configurar o cron é abrir o crontab. Para isso, você pode usar editores de
textos, como normalmente fazemos para modificar a configuração de algum arquivo. Também é possível
digitar o comando "crontab -e" para editar o arquivo exclusivo de seu usuário.
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 dias.
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 informado 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.
Exemplo:
# tarefa 1
30 22 2,10 * * echo "Aprendendo sobre o cron"
Neste exemplo, a frase "Aprendendo sobre o cron" é exibida às 22 horas e 30 minutos, nos dias 2 e
10, em todos os meses e em todos os dias da semana. Repare na linha "#tarefa 1". 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.
Os recursos do cron não se limitam aos mostrados anteriormente. Você pode ainda agendar tarefas
mais complexas e poupar muito trabalho nessas execuções automáticas. É possível, por exemplo,
configurar o cron para emitir-lhe um aviso de quando uma tarefa é executada. A dica para lidar com o cron
é testá-lo. Experimente-o bastante. Mesmo que você seja apenas um usuário doméstico, certamente
encontrará alguma utilidade para o cron.
Exemplo:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
0,15,30,45 * * * * /bin/netstat ­a | /bin/mail root
15 21 * * * /usr/bin/updatedb
# isto é um comentário
As três primeiras linhas definem a shell que vai ser usada pelos scripts, o path de procura de
comandos, e o usuário que vai receber mails em caso de erros. A quarta linha define que aos 0, 15, 30 e 45
minutos de todas as horas, em todos os dias do mês, todos os meses e todos os dias da semana, vai ser
executado o comando /bin/netstat -a | /bin/mail root. A quinta linha define que às 21:15 de
todos os dias será executado o /usr/bin/updatedb.
Você pode adicionar e remover entradas no cron à vontade. Linhas quebcomeçarem com um sinal
de "#" não são consideradas, e você pode usá-las para desativar temporariamente comandos, ou para
acrescentar comentários.
Para listar o conteúdo de sua crontab, use:
# crontab ­l
Para removê-la completamente, use:
# crontab ­u
Para criar um crontab para um usuário escolhido:
#crontab -e <username>
Exercicio: vamos fazer um agendamento de backup. Crie uma pasta chamada backup dentro do seu home.
Agende o sistema para copiar todos os arquivos de configuracao do /etc nessa pasta as 23:55, todas as
segundas, quartas e sextas-feiras.
Exercicio: entenda as seguintes entradas do crontab:
00 00 * * 3 root /sbin/killall5 00 16 14 04 * root /bin/ping 10.1.1.16 > arquivo
18 * * * * /path/nome_do_script >> log_arquivo
Agora diga o que elas fazem.
Download

Unidade 9 – Cron - Drall Dev Community