sexta-feira, 13 de abril de 2007

Home Backup Script (Python)

Como prometi, venho aqui colocar uma nova aplicação.
Na altura precisava de algo que me fizesse um backup da homedir e uploadasse para um servidor o backup pus-me ao trabalho de fazer um script que o fizesse.

Consegui chegar à versão 0.3 desse script e comecei a fazer uma 0.4, quem sabe se daqui a uns tempos não continuo a 0.4

Ah e este script até faz logs e utiliza um ficheiro para as configurações :-P

----------------------------------------
from ftplib import FTP
import time, os, sys, ConfigParser

# Home Backup variabels, don't change this
home = os.environ["HOME"]
config = ConfigParser.ConfigParser()
config.read(home + "/homebackup/homebackup.conf")
hostname = config.get("FTP","hostname")
username = config.get("FTP","username")
passwd = config.get("FTP","passwd")
date = time.strftime("%d-%m-%Y-%H%M%S")
user = os.getenv('USER')
bkp = user + "-backup-" + date + ".tar"
log = open(home + "/homebackup/homebackup.log","a")
version = "0.3"

log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script started.\n")
print "\t\t\tHome Backup Script v" + version + "\t\t\t"
print "Where I will put the backup file?"
print "1. In this directory"
print "2. In a remote machine (You need FTP access)"
option = raw_input("=> ")

def backup():
print "\n" + time.strftime("[%H:%M:%S] ") + "Creating a backup from " + home + " to " + bkp + " ..."
os.system("tar --absolute-names -cf " + bkp + " " + home)
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Creating a backup from " + home + " to " + bkp + " ...\n")
print time.strftime("[%H:%M:%S] ") + "Compressing backup ..."
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Compressing backup ...\n")
os.system("gzip -9 " + bkp)
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + 'Backup created: ' + bkp + ".gz\n")
print time.strftime("[%H:%M:%S] ") + 'Backup created: ' + bkp + ".gz\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script closed.\n\n")
log.close()
def backup_ftp():
print "\n" + time.strftime("[%H:%M:%S] ") + "Creating a backup from " + home + " to " + bkp + " ..."
os.system("tar --absolute-names -cf " + bkp + " " + home)
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Creating a backup from " + home + " to " + bkp + " ...\n")
print time.strftime("[%H:%M:%S] ") + "Compressing backup ..."
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Compressing backup ...\n")
os.system("gzip -9 " + bkp)
bkpfinal = bkp + ".gz"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + 'Backup created: ' + bkp + ".gz\n")
print time.strftime("[%H:%M:%S] ") + 'Backup created: ' + bkp + ".gz"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Now I will upload backup to " + hostname + " ...\n")
print time.strftime("[%H:%M:%S] ") + "Now I will upload backup to " + hostname + " ..."
try:
ftp = FTP(hostname)
except:
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Invalid hostname.\n")
print time.strftime("[%H:%M:%S] ") + "Invalid hostname."
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Upload failed.\n")
print time.strftime("[%H:%M:%S] ") + "Upload failed.\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script closed.\n\n")
sys.exit()
try:
ftp.login(username, passwd)
except:
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Username or Password invalid.\n")
print time.strftime("[%H:%M:%S] ") + "Username or Password invalid."
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Upload failed.\n")
print time.strftime("[%H:%M:%S] ") + "Upload failed.\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script closed.\n\n")
sys.exit()
filebkp = open(bkpfinal,'rb')
uploadcmd = "STOR " + bkpfinal
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Uploading ...\n")
print time.strftime("[%H:%M:%S] ") + "Uploading ..."
ftp.storbinary(uploadcmd, filebkp)
localsize=os.path.getsize(bkpfinal)
remotesize=ftp.size(bkpfinal)
if localsize != remotesize:
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Uploaded file is corrupted.\n")
print time.strftime("[%H:%M:%S] ") + "Uploaded file is corrupted.\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Upload failed.\n")
print time.strftime("[%H:%M:%S] ") + "Upload failed.\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script closed.\n\n")
elif localsize == remotesize:
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Upload completed.\n")
print time.strftime("[%H:%M:%S] ") + "Upload completed.\n"
log.write(time.strftime("[%d-%m-%Y %H:%M:%S] ") + "Home Backup Script closed.\n\n")
filebkp.close()
ftp.quit()
log.close()

if option == "1":
backup()
elif option == "2":
backup_ftp()
elif option != "1":
print "Unknown option."
elif option != "2":
print "Unknown option."
Download completo pode ser feito aqui: http://hydrus.homeunix.net/~amg/homebackup/homebackup-0.3.tar.gz

Sem comentários: