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-----------------------------
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
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-----------------------------
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)
Sem comentários:
Enviar um comentário