por Rodolfo Silveira
Olá pessoal, estou aqui de volta fazendo um pequeno tutorial sobre o crontab o agendador de tarefas do Linux, lembrando que o crontab existe em qualquer versão do linux.
Com o crontab é possivel especificar horários como “todos os dias ás 5 da manhã” ou “a cada meia hora”, “de dez em dez minutos”.
Para a maioria das tarefas pouco importa a hora que vai ocorrer mas sim a frequência em que ela vai ser executada, como diariamente ou semanalmente. Para isso já existe 4 diretórios especiais, que basta o administrador botar o script lá dentro, eles já serão executados na periodicidade desejada.
/etc/cron.daily diário
/etc/cron.hourly a cada hora
/etc/cron.monthly mensal
/etc/cron.weekly semanal
Mas caso você mesmo queira fazer um periodo especifico, com hora e tudo mais, basta editar o arquivo:
/etc/crontab
Então vamos lá. Escolha um editor de sua escolha, no meu caso o VIM e abra um terminal e digite:
sudo vim /etc/crontab
Notem no conteúdo:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
Notem que já existe algumas entradas justamente dos diretórios especiais, para adicionar sua própria tarefa temos que seguir o seguinte padrão de linha:
minuto hora diadomês mês diadasemana usuário comando
Notem que para cada espaço, se avança um campo e os campos seguem o padrão existente que conhecemos, por exemplo no campo mês não pode ter 15 pois temos de 1-12 e o campo da semana usamos de 0 a 7 onde zero e 7 é domingo 1 é segunda-feira, 2 terça-feira e assim por diante.
Temos também alguns caracteres que facilitam a vida:
Caractere | Exemplo | Siginificado |
Hífen | 2-4 | intervalo de 2 a 4 |
virgula | 2,4,6,8 | os números 2,4,6 e 8 |
barra | */10 | de dez em dez |
asterisco | * | todas as opções possiveis |
Vamos botar a mão na massa:
Imagine que temos uma rotina de backup que comprime o o /home
e o /var/log
e queremos que esta rotina aconteça diariamente as 23:35;
Se usarmos o tar por exemplo, poderíamos usar duas linhas de comando ou não, por isso recomendo que crie um script e no arquivo do CRON nós vamos apontar para o script.
Criando o script:
vim /scriptbkp.sh
O conteúdo do script, onde comprime a pasta home
e a pasta log
no hd externo de modo que o nome do arquivo fique com a data do dia da execução e ainda criando um arquivo de log localizado no /scriptbkplog.log
para posterior análise:
#!/bin/sh tar -cvzf /media/hdexterno/bkphome$(date +%Y_%m_%d).tar.gz /home >> /scriptbkplog.log tar -cvzf /media/hdexterno/bkplog$(date +%Y_%m_%d).tar.gz /var/log >> /scriptbkplog.log
Salve e saia.
Vamos dar permissão de execução também:
sudo chmod 755 /scriptbkp.sh
Agora vamos lá no crontab:
sudo vim /etc/crontab
Adicione a seguinte linha:
35 23 * * * root sh /scriptbkp.sh
Salve e saia. Pronto, todos os dias da semana, todos os meses, todos os dias do mês, na hora 23 e minuto 35 ele vai executar o script e enviar o backup para o hd externo do exemplo.
Mas e se quisermos a atividade de segunda e sabado as 09:27. A linha ficará assim:
27 09 * * 1,6 root sh /scriptbkp.sh
Se quisermos toda hora, de 08 as 18 de segunda a sexta:
00 8-18 * * 1-5 root sh /scriptbkp.sh
Se quisermos fazer mensalmente independente da hora, feche o crontab e mova o arquivo para a pasta especial, com o seguinte comando:
sudo mv /scriptbkp.sh /etc/cron.monthly
FIM! Se tiverem dúvida podem entrar em contato valeu!
Rodolfo Silveira
@rodolfo_tec
e-mail: [email protected]