O ÚNICO site que não é um blog, alojado no blogger. É assim tipo um é pá... um..., um coijo...

segunda-feira, março 02, 2009

Backups à preguiçoso II

Ora viva!
Cá estou eu mais uma vez a dar um truque que poucas pessoas vão usar. Da última vez mostrei um script que fazia backups de websites geridos por cpanel que quase podia ser usado por pessoas que não percebiam nada de python. Agora vou mostrar a versão 2.0 do mesmo script, que pode ser usado por qualquer pessoa que saiba escrever. Sim, já não é preciso olhar para o código. A não ser, claro para o copiar, colar e guardar no computador.

Portanto, basta copiar o código python, e guardar num ficheiro de texto ao qual podem dar qualquer nome, desde que tenha extensão .py (para o windows. Em unix/linux pode ser qualquer coisa). Depois é só fazer um ficheiro de texto chamado "cpanel.accounts.txt" e atirar lá para dentro os dados das contas. Vamos ver um exemplo:

Ficheiro cpanel.accounts.txt-----------------------------


username=OMeuSite
password=AMinhaPass
domain=OMeuDominio
folder=APastaOndeVouGuardarOBackup
host=127.0.0.1:1234
dbs=soTemUmaDB
replace=yes

username=OMeuSite2
password=AMinhaPass2
domain=OMeuDominio2
folder=APastaOndeVouGuardarOBackup2
host=127.0.0.1:1234
dbs=dbPrincipal,dbSecundaria
replace=yes

Ficheiro cpanel.accounts.txt-----------------------------

Aqui vemos um exemplo simples de um ficheiro de contas com duas contas. Reparem que as várias contas têm de estar separadas por uma linha em branco e tem de existir uma linha em branco no fim do ficheiro. De resto é quase tudo igual à versão anterior, só existem dois parâmetros novos:

"replace": Serve para decidir se vamos guardar todos os dias novas cópias de backups ou se queremos substituir a cópia de ontem. Neste caso decidi substituir, para poupar espaço no disco.

"dbs": Serve para indicar o nome das bases de dados presentes na conta e que devem ser guardadas. As várias bases de dados são separadas por virgulas. No exemplo acima, a primeira conta só tem uma base de dados e a segunda conta tem duas.

Podem por uma centena de contas neste ficheiro. Para que funcione, basta estar junto ao programa python do qual se segue o código. Devem copiar sem qualquer alteração para um ficheiro de texto tal como disse mais acima.

Ficheiro cpanel-backup.py-----------------------------

#!/usr/bin/env python
from os import system
from datetime import date

def dbBackup(db, url, folder, replace = True):
db = db.strip()
download = "%s.sql.gz" % db
system("rm %s/%s" % (folder, download))
system("wget -P %s %s/getsqlbackup/%s" % (folder, url, download))
if not replace:
today = date.today()
newfile = "db-%s-%d%d%d.sql.gz" %\
(db, today.day, today.month, today.year)
system("rm %s/%s" % (folder, newfile))
system("mv %s/%s %s/%s" %(folder, download, folder, newfile))

def homeBackup(username, url, folder, replace = True):

if replace:
download = "home-%s.tar.gz" % username
else:
today = date.today()
download = "home-%s-%d%d%d.tar.gz" %\
(username, today.day, today.month, today.year)

system("rm %s/%s" % (folder, download))
system("wget -P %s %s/getbackup/%s" %\
(folder, url, download))

def doBackup(account):

url = 'http://%s:%s@%s' %\
(account['username'], account['password'], account['host'])

if account['replace'] == 'yes': replace = True
else: replace = False

for db in account['dbs'].split(','):
dbBackup(db, url, account['folder'], replace)

homeBackup(account['username'], url, account['folder'], replace)


def getAccounts(infile):
accounts = []
f = open(infile, 'r')
account = {}

for line in f:
line = line.strip()
if line == '##': break
if not line:
if not account == {}:
accounts.append(account)
account = {}
if line and not line[0] == '#':
pos = line.find('=')
key = line[0:pos].strip()
value = line[pos+1:].strip()
account[key] = value
f.close()
return accounts

if __name__ == '__main__':

accounts = getAccounts('cpanel.accounts.txt')
for account in accounts:
doBackup(account)
Ficheiro cpanel-backup.py-----------------------------

Sem comentários:

Enviar um comentário

eXTReMe Tracker