Backup por email – backup4Mail.py
Posted on jul 04, 2009 under Python | No CommentDesenvolvi há algum tempo um script de backup por e-mail escrito em python. Esse script lê um arquivo de configuração onde está descrito todos os arquivos que devem estar no backup, logo após gera um arquivo tar compactado com bz2, e envia para o e-mail desejado.
Utilizo esse script para arquivos pequenos – como arquivos de configurações dos servidores que administro, uma limitação desse tipo de backup é o tamanho máximo suportado para envio e recebimento de e-mails, por exemplo, o gmail não aceita arquivos maiores que 20M.
Vamos ao script:
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
#Author: Marlon Luis Petry
#Licença GPL
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os
import tarfile
import time
import datetime
import re
def sendMail(to, subject, text, files=[],server="localhost"):
assert type(to)==list
assert type(files)==list
fro = "Server Backup "
msg = MIMEMultipart()
msg['From'] = fro
msg['To'] = COMMASPACE.join(to)
msg['Date'] = formatdate(localtime=True)
today = datetime.date.today()
msg['Subject'] = subject + str(today)
msg.attach( MIMEText(text) )
for file in files:
part = MIMEBase('application', "octet-stream")
part.set_payload( open(file,"rb").read() )
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"'
% os.path.basename(file))
msg.attach(part)
smtp = smtplib.SMTP(server)
smtp.sendmail(fro, to, msg.as_string() )
smtp.close()
def backupTar(nameBackup,conf="/etc/backup.conf"):
tar = tarfile.open(nameBackup,'w:bz2')
f = open(conf,'r')
p = re.compile('\#')
for line in f:
if not p.match(line): #descarta linhas que comecem por #
file = line.replace('\n','') # Remove \n
tar.add(file) #adiciona ou arquivo tar
tar.close()
name = 'backupSRV.tar.bz2' #nome do backup
backupTar(name)
sendMail(["xxxx@gmail.com"],"backup","backup",[name])
O arquivo de configuração deve estar no /etc/backup.conf, exemplo da estrutura do arquivo:
/etc/postfix/
/etc/apache2/
/root/scripts/
O arquivo não deve possuir linhas em branco
Depois de configurado é só inserir no crontab o script para gerar o backup e enviar por email nos horários desejados.
