#1 Le 22/10/2008, à 19:49
- HAEFFLER
Un script python pour faire des backups
Bonjour, j'ai écris un petit script python utilisant rsync pour faire des backups de vos fichier.
si çà peut vous servir tant mieux, si vous avez des commentaires c'est encore mieux (je ne suis pas un pro de la programmation).
le fichier backup.py :
#!/usr/bin/python
# -*- coding: utf-8 -*-
########################################
##Programme pour faire des sauvegardes##
########################################
## import des class
import sys
import os
import time
#initialisation des variable
cwd=os.getcwd()
home=os.environ['HOME']
conf=cwd+"/backup.conf"
log=cwd+"/backup.log"
log_size_max=1048576 #taille max du fichier log : 1024 octets=1Ko; 1048576 octets=1Mo
#definition de fonction
def racine_home(file):
#on test si le fichier demare home
if file[0]=="~":
file=home+"/"+file[1:]
return(file)
#on test si le fichier est la racine
elif file[0]!="/":
file=cwd+"/"+file
return(file)
def log_msg(list):
#affichage a la console
for arg in list:
print arg,
#ecriture dans le fichier
log_file=open(log,"a")
log_file.writelines(list)
log_file.close()
#verification si la taille max est atteinte
size=os.path.getsize(log)
if size >log_size_max:
#lecture du fichier
log_file=open(log,"r")
size_del=size-log_size_max
while size_del>0:
line=log_file.readline()
size_del=size_del-len(line)
#lecture du fichier a gard
rest_file=log_file.readlines()
log_file.close()
#ecriture du nouveau fichier
log_file=open(log,"w")
log_file.writelines(rest_file)
log_file.close()
#Lecture des argument
list_arg=sys.argv
list_backup=[]
i=1
for arg in list_arg[1:]:
#demande d'aide ?
if arg in ("-h", "--help" ,""):
print "Fonction : "
print " backup.py fait des sauvegardes de vos fichiers en utilisant rsync. "
print ""
print "utilisation : "
print " backup.py argument1 argument2 "
print ""
print "option disponible : "
print " -h or --help affiche l'aide"
print " -conf : spcifie le fichier de configuration "
print " -log : spcifie le fichier log"
print ""
print "exemple de fichier backup.conf"
print ""
print "###########################################"
print "# fichier de configuration pour backup.py #"
print "###########################################"
print "#"
print "#"
print "[argument1]=source1->destination1/"
print "[argument2]=source2->destination2/"
exit(1)
elif arg in ("-conf"):
conf=list_arg[i+1]
conf=racine_home(conf)
elif arg in ("-log"):
log=list_arg[i+1]
log=racine_home(conf)
else:
if list_arg[i-1][0]!='-':
list_backup.append(arg)
i=i+1
#dbut du fichier log
list_msg=[]
time=time.strftime('%y/%m/%d %H:%M',time.localtime())
list_msg.append("\n\n"+ time+" Début des backup \n")
#lecture du fichier backup.conf
try:
conf_file=open(conf,"r")
except:
list_msg.append(" [ERREUR] : Impossible d'ouvrir le fichier de configuration "+conf+"\n")
list_msg.append(" [ERREUR] : Arrèt de "+list_arg[0]+" \n")
log_msg(list_msg)
exit(0)
list_conf=conf_file.readlines()
conf_file.close()
#recherche des paramtre pass en argument
for param in list_backup:
list_msg.append("\n Backup : "+ param +"\n")
for arg in list_conf:
if arg[0:(len(param)+3)]=="["+param+"]=":
#recherche de la source et destination
index_source_debut=len(param)+3
index_source_fin=arg.find("->")
source=arg[index_source_debut:index_source_fin]
destination=arg[index_source_fin+2:]
list_msg.append( " SOURCE : "+ source+" DESTINATION : "+destination)
#creation de la commande
cmd="rsync -a --delete "+ source + " "+destination
list_msg.append(" "+cmd)
retour_cmd=os.popen3(cmd)
#print "retour popen3"
#print retour_cmd
retour_normal=retour_cmd[1].readlines()
for arg in retour_normal:
list_msg.append(" "+arg)
retour_erreur=retour_cmd[2].readlines()
for arg in retour_erreur:
list_msg.append(" [ERREUR]:"+arg)
log_msg(list_msg)
list_msg=[]
Exemple de fichier backup.conf
###########################################
# fichier de configuration pour backup.py #
###########################################
#
#
#[argument1]=source1->destination1/
#[argument2]=source2->destination2/
[perso]=/media/perso/->~/backup/perso/
#evolution
[evolution]=~/.evolution->~/backup/evolution/
[evolution]=~/.gconf/apps/evolution->~/backup/evolution/
[evolution]=~/.gnome2_private/Evolution->~/backup/evolution
exemple utilisation :
python backup.py -conf backup.conf evolution
Vous pourrez aussi facilement l'automatiser avec cron : http://doc.ubuntu-fr.org/cron