O "cron" é um programa de "agendamento de tarefas".
Com ele você pode programar para ser executado qualquer coisa numa certa
periodicidade ou até mesmo em um exato dia, numa exata hora. Um uso bem comum
do cron é o agendamento de tarefas administrativas de manutenção do seu
sistema, como por exemplo, procura por links simbólicos quebrados, análise de
segurança do sistema, backup, entre outros. Estas tarefas são programadas para
todo dia, toda semana ou todo mês, serem automaticamente executadas através do
crontab e um script shell comum. A configuração do cron geralmente é chamada de
crontab.
Os sistemas Linux possuem o cron sempre
presente. Pelo menos eu nunca vi nenhuma distribuição que não incluísse o tão
útil cron. A configuração tem duas partes: Uma global, e uma por usuário. Na
global, que é o root quem controla, o crontab pode ser configurado para
executar qualquer tarefa de qualquer lugar, como qualquer usuário. Já na parte
por usuário, cada usuário tem seu próprio crontab, sendo restringido àpenas ao
que o usuário pode fazer (e não tudo, como é o caso do root).
Para configurar um crontab por usuário,
utiliza-se o comando "crontab",
junto com um parâmetro, dependendo do que você quiser fazer. Abaixo uma
relação:
|
Comando |
Função |
|
crontab
-e |
Edita
o crontab atual do usuário |
|
crontab
-l |
Exibe
o atual conteúdo do crontab do usuário |
|
crontab
-r |
Remove
o crontab do usuário |
Se você quiser verificar os arquivos crontab
dos usuários, você precisará ser root. O comando crontab coloca os arquivos dos
usuários no diretório:
/var/spool/cron/usuario |
Onde "usuario" corresponde ao usuário dono do arquivo crontab.
Agora se você quiser editar o crontab global,
este fica no arquivo "/etc/crontab",
e só pode ser manipulado pelo root. E agora que já sabemos onde ficam os
arquivos de configuração, vamos estudar o formato da linha do crontab, que é
quem vai dizer o que executar e quando. Vamos ver um exemplo:
0 4 * * * who |
Então como se pode ver, a linha é dividida
em 6 campos separados por tabs ou espaço:
|
Campo |
Função |
|
1o. |
Minuto |
|
2o. |
Hora |
|
3o. |
Dia
do mês |
|
4o. |
Mês |
|
5o. |
Dia
da semana |
|
6o. |
Programa
pra execução |
Todos estes campos, sem contar com o 6o.,
são especificados por números. Veja a tabela abaixo para os valores destes
campos:
|
Campo |
Função |
|
Minuto |
0-59 |
|
Hora |
0-23 |
|
Dia
do mês |
1-31 |
|
Mês |
1-12 |
|
Dia
da semana |
0-6
(o "0" é domingo, "1" segunda, etc) |
Então o que nosso primeiro exemplo estava
dizendo? A linha está dizendo: "Execute
o comando 'who' todo dia de todo mês sendo o dia qualquer dia da semana, às 4
horas e 0 minutos.". Vamos pegar mais exemplos para analisar:
1,21,41 * * * * echo "Meu crontab rodou mesmo!" |
Aqui está dizendo: "Executar o comando do sexto campo toda hora,
todo dia, nos minutos 1, 21 e 41".
30 4 * * 1 rm -rf /tmp/* |
Aqui está dizendo: "Apagar todo conteúdo do diretório /tmp toda segunda-feira,
as 4:30 da manhã.".
45 19 1,15 * * /usr/local/bin/backup |
Aqui está dizendo: "Executar o comando 'backup' todo dia 1 e 15
às 19:45.".
E assim você pode ir montando inúmeros jeitos
de agendamento possível. No arquivo do crontab global, o sexto campo pode ser
substituído pelo nome do usuário, e um sétimo campo adicionado com o programa
para a execução, como mostro no exemplo a seguir:
0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg |
Aqui está dizendo: "Executar o mrtg como usuário root, durante 5
e 5 minutos dos minutos 0-59. Ou seja, executar de 5 em 5 minutos o mrtg
sempre.".
Em alguma distribuições, os agendamentos
mais comuns estão programados para serem executados. Veja as linhas abaixo:
01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly |
O programa "run-parts" executa todos os scripts executáveis
dentro de um certo diretório. Então com essas linhas, temos diretórios
programados para executar programas de hora em hora, diariamente, semanalmente
ou mensalmente. Abaixo a tabela:
|
Diretório |
Período |
|
/etc/cron.hourly |
De
hora em hora |
|
/etc/cron.daily |
Diariamente |
|
/etc/cron.weekly |
Semanalmente |
|
/etc/cron.monthly |
Mensalmente |
Então todos os arquivos executáveis dentro
de cada diretório serão executados no seu correspondente período. Ou seja,
posso colocar um certo conteúdo no arquivo "/etc/cron.daily/teste", depois torná-lo executável através
do comando "chmod +x
/etc/cron.daily/teste", e então ele será executado todo dia as 4:02
da manhã.
Bem é isso! Agora você já pode programar
suas tarefas para serem automaticamente executadas e te poupar muito trabalho
manual :)