Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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