Python - Enviando Backup para Servidor Secundário

Script em Python, utilizado para fazer backup de uma lista de diretórios e enviar para um servidor secundário. Este artigo tem o
intuito de mostrar passo-a-passo, um pouco da linguagem Python.

[ Hits: 19.145 ]

Por: Antonio Edmilson de Andrade Junior em 25/02/2012


Desenvolvimento do programa em Python



Com um editor de texto de sua preferência, crie um arquivo "backup.py", ou então, utilize um IDE (Integrated Development Environment) como Eclipse, com plugin Pydev instalado.

Eu vou utilizar o editor VI.

I- Crie uma pasta, onde você deseja armazenar os arquivo de backup, da seguinte forma:

# mkdir /backup

II- Vamos criar o script em Python, com o nome de "backup.py" dentro do diretório que criamos:

# vi /backup/backup.py

III- O uso da '#' (cerquilha) representa comentários, parte do código que não é interpretada ou executada (exceto na primeira linha que representa a interpretação).

Vamos adicionar o seguinte código, no conteúdo do arquivo:

# -*- coding: UTF-8 -*- #------Importando bibliotecas nativas do python----- import tarfile #bibliteca capaz de compactar, descompactar arquivos tar, tar.gz, tgz. from datetime import datetime #biblioteca para trabalhar com data e hora. import os # biblioteca que permite utilizar comando do sistema operacional que estou executando o python. msg = ' ' #Declarando variável para armazenar mensagens que serão gravadas no log. Podemos notar que em python na declaração de variável não precisamos passar o tipo de variável. #------VERIFICANDO O DIA DA SEMANA----- date = datetime.today() #Verificando data e hora e armazenando em uma variável. data = date.strftime("%d-%m-%Y %H:%M:%S") #Como o comando acima me retorna uma lista, esse comando filtra a informação de acordo com o que desejo. arquivo = date.strftime("%A") #Coletando a informação do dia da semana #------Tradução------------------------ #Como o retorno do comando [date.strftime("%A") é em inglês, abaixo criei algumas condições para fazer a tradução do valor que será armazenado na variável "arquivo". if arquivo == 'Sunday': arquivo='Domigo' elif arquivo == 'Monday': arquivo='Segunda-feira' elif arquivo == 'Tuesday': arquivo='Terça-feira' elif arquivo == 'Wednesday': arquivo='Quarta-feira' elif arquivo == 'Thursday': arquivo='Quinta-feira' elif arquivo == 'Friday': arquivo='Sexta-feira' elif arquivo == 'Saturday': arquivo='Sábado' #------CRIANDO ARQUIVO tar.gz-------------- backup = tarfile.open(arquivo+".tar.gz", "w:gz") #Esse comando cria um arquivo tar.gz vazio no diretório onde esta sendo #executado o programa. Caso você deseja gravar em outro diretório, é só #adicionar antes de "arquivo+" o diretório desejado. #Ex: backup = tarfile.open(/tmp/arquivo+".tar.gz", "w:gz") #------COMPACTANDO O BACKUP DO DIA----- for dir in ['/home/joao','/etc/root','/etc/samba']: #Aqui tem uma lista onde tem um laço de repetição para varrer toda lista e adicionar o conteudo na veriável "dir" try: backup.add(dir) # Adicionando o conteudo do da variável dir no arquivo criando anteriormente até que toda a lista seja compactada. except OSError: msg += '%s não encontrado. \n'%dir os.system('rm -rf %s.tar.gz' %arquivo) backup.close() #Após adicionar toda a lista estou fechando o arquivo. #-------ENVIANDO BACKUP PARA O SERVIDOR DE BACKUP SECUNDARIO---- #-------ENVIA VIA SCP OS ARQUIVOS------------------------------- x=os.system('scp -r %s.tar.gz root@192.168.1.10:/home/backup/' %arquivo) # Se o arquivo for entre com sucesso o sistema retorna o valor 0, if x !=0: #então eu gravo na variável "msg" que o mesmo foi entregue com sucesso. date = datetime.today() msg += 'Não conseguir enviar o arquivo %s.tar.gz para 192.168.1.10. \n'%arquivo else: date = datetime.today() msg += 'Arquivo %s.tar.gz entregue com sucesso. \n'%arquivo #Por ultimo gravo toda informação da variável "msg" no arquivo de log #------------Gravando log---------------------------------------- if msg: open('/var/log/backup.log', 'a').write('['+data +'] - '+ msg) #---------------------------------FIM--------------------------------------------------------------------


IV- Por fim, salve o arquivo.

Criando Script em Shell

I- Cria o arquivo no diretório desejado:

# vi /backup/auto.bash

II- Conteúdo do arquivo "auto.bash":

#!/bin/bash
cd /backup
/usr/bin/python backup.py


Salva o arquivo.

III- Alterar a permissão do arquivo para executável:

# chmod +x /backup/auto.bash

- Configurando Crontab

I- Execute o comando:

# crontab -e

II- Adicione na última linha, o seguinte comando:

20 20 * * *    /backup/auto.bash


Salva o arquivo.

III- Explicando a linha acima:
* --- Minutos
| * --- hora
| | * --- dia do mês
| | | *--- mês
| | | | * --- dia da semana
| | | | | * --- comando a executar--->
| | | | | |
20 20 * * * /backup/auto.bash

Conclusão

Uma linguagem rica, simples e boa de trabalhar. Com potencial de fazer um programa pequeno como este que fiz para backup.

Espero que você goste, tenha curiosidade sobre a linguagem e que eu possa ajudar a você em alguma situação.

Obrigado a todos.
Página anterior    

Páginas do artigo
   1. Introdução
   2. Desenvolvimento do programa em Python
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Como criar um keylogger em Python

Criando um leitor de RSS com Python

Scikit Learn: Projetando o futuro de suas APIs e aplicativos usando machine learning

PEP 8 - Guia de estilo para código Python

RapidScan - Multi-Tool WEB Vulnerability Scanner

  
Comentários
[1] Comentário enviado por dtelaroli em 25/02/2012 - 14:58h

Para melhorar a lógica e escrita o monte de ifelse poderia ser substituido por um comando equivalente ao switch do c

http://simonwillison.net/2004/may/7/switch/

[2] Comentário enviado por antonio_edmilson em 27/02/2012 - 08:22h

Sim, claro.
Mais acontece que a idéia de traduzir os dias da semana eu tive só depois, então foi feito meio no funcional, ou seja, funcionou está bom rsrsrsrs...

Obrigado pela idéia.

[3] Comentário enviado por marcydoty em 27/02/2012 - 09:20h

Oi, gostei muito do artigo, será de muita utilidade, parabéns.

[4] Comentário enviado por lesleyribeiro em 27/02/2012 - 14:30h

Nossaaa!!! Esse tutorial foi um "achado"!!!!
Estava precisando justamente de um script assim.
Já adaptei para o meu cenário, tudo funcionando 100%

Parabéns pelo artigo!

[5] Comentário enviado por ricardoolonca em 28/02/2012 - 11:34h

Você não precisa criar um script bash para rodar na cron. Pode fazer assim:

20 20 * * * /usr/bin/python backup.py

[6] Comentário enviado por antonio_edmilson em 28/02/2012 - 17:19h

maionesebr - Na verdade o script bash é para força a criação do arquivo.tar.gz no diretorio desejado. Caso eu faço como você falou, o arquivo vai gerar na raiz / , isso pode ser perigoso.

[7] Comentário enviado por jeffersonpgodoy em 29/02/2012 - 16:31h

Muito bom o artigo, resolveu o problema na empresa que trabalho.

Parabéns!!!

[8] Comentário enviado por Bum em 01/03/2012 - 20:54h

Muito bom Edmílson, de enorme utilidade...

[9] Comentário enviado por stack_of em 01/03/2012 - 23:07h

Uma idéia. Ao invés de vários elif, use um dicionário:
arquivo = date.strftime("%A")
dia = {"Wendnsday":"Quarta", "Sunday":"Domingo", "Tuesday":"Terca", "Thursday":"Quinta", "Monday":"Segunda", "Friday":"sexta"}

Para obter a traducao:

dia[arquivo]

O código fica mais compacto e legível.




[10] Comentário enviado por antonio_edmilson em 02/03/2012 - 08:22h

Ok stack_of, obrigado pela dica.

[11] Comentário enviado por Kerley.Leite em 02/03/2012 - 14:48h

Parabens pelo artigo, é de muita valia !!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts