sexta-feira, 14 de junho de 2013

Agendamendo de taferas e bash script (Utilizando backup de exemplo)

Olá! Hoje vou mostrar e explicar para vocês um pouco sobre agendamento de tarefas no linux utilizando o crontab.

Esta semana na empresa onde eu trabalho fiquei focado no nosso servidor Nagios (Monitoramento de rede, hosts, serviços e etc). Incluí hosts, criei novos templates, configurei mais serviços de monitoramento e fiz mais algumas alterações. Após feito todas essas mudanças ficou aquele medo de algum dia perder todos os arquivos de configuração... Qual a solução para acabar com esse risco? Backup, óbvio. Desenvolvi um bash script da seguinte forma: Toda vez que rodarem esse script ele vai compactar todos os arquivos do diretório /etc/nagios3 (Diretório onde fica os arquivos de configuração do Nagios) e vai salvar no diretório de backup que eu defini no script, o nome deste arquivo altera conforme data e hora. Ex: backup-2013-06-14-17.29.tar.gz) Backup executado no dia 14/06/2013 ás 17h29.

Parar criar um bash script no linux, você cria um arquivo através de um editor de texto, por exemplo, o vim.

vim backup.sh

Será aberto em tela um arquivo em branco com o nome de backup.sh (É necessário a extensão .sh para o linux compreender que se trata de um bash script). Este arquivo deverá começar com um comentário especial:

#!/bin/bash

Depois dessa linha você pode usufruir da sua imaginação, divirta-se. Crie variáveis, loops, casos, deixe as linhas comentadas utilizando "#" antes do comentário e etc.

Vou colar aqui o script que eu desenvolvi para realizar o backup conforme eu disse no segundo paragrafo desse post:

 #!/bin/bash
#Realizando backup do diretorio: /etc/nagios3/
    DATA=`date +%Y-%m-%d-%H.%M`
    cd /home/daniel/autobackup
    tar -cvzf backup-"$DATA".tar.gz /etc/nagios3/

#Este script esta sendo executado em uma rotina no arquivo Crontab.
#Zipa os arquivos do Nagios no diretorio /home/daniel/autobackup alterando automaticamente o nome de acordo com a data e hora.

Como vocês podem ver a variável "DATA" foi onde eu defini que será trocado o nome do arquivo de acordo com a data e hora de execução. As linhas que começam com "#" são linhas comentadas (não interferem nas funções do script) e o comando "tar -cvzf" é o que compacta (zipa) os arquivos definidos, neste caso: /etc/nagios3.

Bom, este script resolveu o meu problema, não preciso mais compactar os arquivos, alterar o nome do arquivo, salvar no diretório de backup tudo na unha, já esta automatizado e padronizado dentro do script.

Daniel, você tem que acessar o servidor e rodar o script manualmente, certo? Errado! Vamos automatizar ainda mais esse processo de backup, utilizaremos então um agendador de tarefas para rodar esse script em determinado dia, mês, dia da semana, hora e etc.

Utilizaremos o crontab para agendar a execução deste script... O crontab é um programa do linux onde vc edita um arquivo especificando QUANDO e QUAL tarefa será executada pelo cron (Executa os comandos agendados). Segue os paramêtros do arquivo crontab:



-l usuário -- lista as tarefas agendadas para o usuário
-e usuário -- edita o agendador
-r usuário -- apaga o arquivo do usuário
-c diretório -- especifica um diretório para o Crontab
 
No terminal vamos executar "crontab -e" para abrir o arquivo do crontab e assim definir o agendamento.

Dentro do arquivo terá uma linha comentada da seguinte forma:

mm hh dd MM ss script
 
Esses é o modelo (sintaxe) de como você irá definir seu agendamento. Segue a sintaxe retirada do Wikipedia:

mm = minuto(0-59)
hh = hora(0-23)
dd = dia(1-31)
MM = mes(1-12)
ss = dia_da_semana(0-6)
script = comando a ser executado.
Obs 1: Em dia_da_Semana, 0 refere-se a domingo; e 6, ao sábado. 
       No caso de dia da semana funciona também as três primeiras letras 
       (em inglês) do dia da semana (SUN,MON,TUE,WED,THU,FRI,SAT)
Obs 2: Em qualquer posição pode-se usar o * (asterisco) quando não se 
       importar com o campo em questão.
Obs 3: Pode-se utilizar intervalos nesses campos. O caracter para intervalo
       é o - (hifen).
Obs 4: Pode-se utilizar lista de valores nesses campos. O caracter para a
       lista é a , (vírgula).
Obs 5: Qualquer texto colocado após o programa que será executado será
       considerado comentário e não será interpretado pelo cron
 
 Bom, como vocês podem ver é bem simples, você passa a data e hora e o que será executado. No caso do meu backup o meu agendamento ficou da seguinte forma:

00 23 15 * * /home/daniel/autobackup/backup.sh
 
 
Então todo dia 15 ás 23:00hrs será executado o script "backup.sh" que esta salvo no diretório "/home/daniel/autobackup/".

Bem pessoal, espero que vocês tenham gostado de mais um dos meus posts. São coisas simples assim que podem te livrar de uma extrema dor de cabeça como por exemplo deletar os arquivos de configuração de um servidor e etc. É melhor perder algum tempo elaborando uma maneira de fazer backup do que no futuro perder toda sua informação e/ou configuração. No post de hoje matamos dois coelhos em uma cajadada só: a importancia do backup e a utilização do crontab.

É isso. Qualquer dúvida, sugestão, critica e etc envie para o meu e-mail: daniel.antoniassi@live.com

Até a próxima!

Nenhum comentário:

Postar um comentário