begin process at 2012 05 25 07:42:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Python

 > 

Divers

 > 

Débutant(e)

 > 

Zénity, rsync, script bash de sauvegarde de répertoires sur disque usb


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Zénity, rsync, script bash de sauvegarde de répertoires sur disque usb

lundi 18 janvier 2010 à 15:43:58 | Zénity, rsync, script bash de sauvegarde de répertoires sur disque usb

stooff

Bonjour à tous.

Ne trouvant pas de rubrique bash, bourne shell ou assimilé, je poste dans la rubrique la plus proche du contenu de ce post.

Ne trouvant pas de logiciel à la fois hyper simple et surtout opensource, ceci afin de réaliser mes sauvegarde journalière sur disque USB. Je me suis mis en quête de le réaliser.

Il permet d'avoir une icone permettant de lancer la sauvegarde via zenity (simplissime) et utilisant rsync (puissant, robuste, etc ...). Malheureusement il y a un hic dans une des fonctions (not function) de zenity permettant de fermer la fenetre de sauvegarde et coupant ainsi rsync dans sa lancée. Mieux qu'un long discours : le script !

Merci de me donner vos impressions et vos commentaires. Et si vous pensez pouvoir m'aider, un grand merci à vous.

Code :
#!/bin/bash

## initialisation des variables de répertoire
HOME_SRC_REP=/home/$USER
HOME_DEST_REP=/media/NTFSDATA/BACKUP/$USER
DEST_REP=/media/NTFSDATA/BACKUP/
SYS_REP=/media/NTFSDATA/BACKUP

Finish="0"
	
#Test de REP_EXCLUS sinon creation
if ! test -e $REP_EXCLUS
then touch $REP_EXCLUS
fi

# Lancement de l'icone globale en barre des taches
exec 3> >(zenity --notification --window-icon="$SYS_REP/.icons/loaded.png" --listen --text="Sauvegarde USB")

## fonction de detection du disque USB via la presence du repertoire DEST_REP
function Detect_USBHDD
{
	## Boucle de test du disque dur
	if ! test -e $DEST_REP; then
		echo "message:Veuillez brancher votre disque dur externe pour la sauvegarde !" >&3
	else	zenity --notification --window-icon="$SYS_REP/.icons/info.png" --text="Disque USB détecté ! Cliquer pour commencer la sauvegarde"	
		if [ $? -eq "0" ]; then
			Ask_LAUNCH
		else	Detect_USBHDD
		fi
	fi
} 

## demande a l'utilisateur confirmation de lancement de la sauvegarde
function Ask_LAUNCH 
{
zenity --question --text="Voulez-vous commencer la sauvegarde ?"

if [ $? -eq "1" ]; then
	echo "message:Sauvegarde annulée." >&3
	Detect_USBHDD
else	Launch_BACKUP
fi
} 

## Lancement de la sauvegarde
function Launch_BACKUP
{
	rsync --verbose --progress --archive $HOME_SRC_REP $DEST_REP  |  
	     awk -f $SYS_REP/.rsync.awk | 
	     zenity --progress --width=400 --title "Sauvegarde en cours ..." --text="Scan en cours..." --percentage=0
	     ###
	     # Ici, quelque soit la methode utilisé, lorsque je catch le signal de sortie de zenity, le processus rsync ne se ferme pas en meme temps, en tant que processus parent de zenity c comprehensible, mais comment faire ? 
	     ###
	Finish="1"
}

Detect_USBHDD

## Prévient l'utilisateur de la fin de la synchronisation
if [ $Finish -eq "1" ]; then
	zenity --info \
	  --window-icon="$SYS_REP/.icons/info.png" \
	  --text="Sauvegarde USB terminée avec succès !"
	if [ $? -eq "1" ]; then
		Detect_USBHDD
	fi
else	zenity --info \
	  --window-icon="$SYS_REP/.icons/warning.png" \
	  --text="Sauvegarde USB inachevée ! Une erreur inconnue s'est produite."
	if [ $? -eq "1" ]; then
		Detect_USBHDD
	fi  
exit 0
mardi 19 janvier 2010 à 14:39:23 | Re : Zénity, rsync, script bash de sauvegarde de répertoires sur disque usb

stooff

Ayant progressé un peu sur ce script je le reposte. Malheureusemnt je n'ai toujours pas trouvé de solution a mon probleme initial, quelques pistes ont été exploitées mais sans succès.

La fenetre zenity de copie avec barre de progression étant initialisée en processus fils de rsync, il est donc normal qu'en cas d'annulation via le bouton annuler de cette meme fenetre cela ne feme pas rsync en tant que processus parent. awk serait certainement la solution a ce probleme mais pfffff je jette l'eponge.

J'ai vu pas mal d'autre scripts specifiques a la fermeture des processus parents en cas de kill du ou des processus fils mais sans succès d'intégration.

Merci de votre aide.

rsync_usb_disk.sh (gestion start stop rajouter au script) :
Code :
#!/bin/bash

## initialisation des variables de répertoire
HOME_SRC_REP=/home/$USER
HOME_DEST_REP=/media/NTFSDATA/.backup/$USER
DEST_REP=/media/NTFSDATA/.backup/
SYS_REP=/media/NTFSDATA/.backup
EXCLUDE_FILE=$SYS_REP/.$USER.exclusion
PARTAGES_REP=$SYS_REP/.partages/$USER
ICONE_REP=$HOME_SRC_REP/.rsync_usb_disk/icones

## fonction de detection du disque USB via la presence du repertoire DEST_REP
function Detect_USBHDD
{
	## Boucle de test du disque dur
	if ! test -e $DEST_REP; then
		echo "message:Veuillez brancher votre disque dur externe pour la sauvegarde !" >&3
	fi
	while ! test -e $DEST_REP; do
		wait
	done
	if test -e $DEST_REP; then
		echo "message:Disque USB détecté." >&3
		zenity --notification --window-icon="$ICONE_REP/info.png" --text="Cliquer pour commencer la sauvegarde"
		if [ $? -eq "0" ]; then
			Ask_LAUNCH
		else	Detect_USBHDD
		fi
	fi
} 
	## demande a l'utilisateur confirmation de lancement de la sauvegarde
function Ask_LAUNCH 
{
	zenity --question --text="Voulez-vous commencer la sauvegarde ?"
	if [ $? -eq "1" ]; then
		echo "message:Sauvegarde annulée." >&3
		Detect_USBHDD
	else	Launch_BACKUP
	fi
} 
## Lancement de la sauvegarde
function Launch_BACKUP
{
	echo "rsync --verbose --progress --archive --exclude-from=$EXCLUDE_FILE $HOME_SRC_REP $DEST_REP"
	rsync --verbose --progress --archive --exclude-from=$EXCLUDE_FILE \
		--delete-before --delete-excluded --ignore-errors \
     	$HOME_SRC_REP $DEST_REP  |  
	     awk -f $SYS_REP/.rsync.awk | 
	     zenity --progress --width=400 --title "Sauvegarde en cours ..." --text="Scan en cours..." --percentage=0
	     ###
	     # Ici, quelque soit la methode utilisé, lorsque je catch le signal de sortie de zenity, le processus rsync ne se ferme pas en meme temps, en tant que processus parent de zenity c comprehensible, mais comment faire ? 
	     ###
	Finish="0"
}
## Tuer les processus
function Kill_PROC
{
	zenity_pids=$(ps -A  | grep zenity | awk '{print $1}')
	while [ "$zenity_pids" != "" ]; do
		ps -A  | grep zenity | awk '{print $1}' | xargs kill -9 &
		rsync_pids=$(ps -A  | grep rsync | awk '{print $1}')
		if [ "$rsync_pids" != "" ]; then
			ps -A  | grep rsync | awk '{print $1}' | xargs kill -9 &
		fi
	done
}

case "$1" in
'start')
	pids=$(ps -A  | grep zenity | awk '{print $1}')
	if [ "$pids" == "" ]; then
		Finish="0"
	
		#Test de REP_EXCLUS sinon creation
		if ! test -e $EXCLUDE_FILE; then
			touch $EXCLUDE_FILE
		fi
		# Test de PARTAGES_REP sinon creation
		if ! test -e $PARTAGES_REP; then
			touch $PARTAGES_REP
		else cp $PARTAGES_REP/* /var/lib/samba/usershare
		fi
		# Lancement de l'icone globale en barre des taches
		exec 3> >(zenity --notification --window-icon="$ICONE_REP/loaded.png" --listen --text="Sauvegarde USB via rsync et zenity.")
		if [ $? -eq "1" ]; then
			zenity --question --text="Voulez-vous vraiment fermer le programme ?"
			if [ $? -eq "1" ]; then
				rsync_usb_disk.sh stop
				exit 0
			fi
		fi
		Detect_USBHDD

		## Prévient l'utilisateur de la fin de la synchronisation
		if [ $Finish -eq "1" ]; then
			zenity --info \
			  --window-icon="$ICONE_REP/info.png" \
			  --text="Sauvegarde USB terminée avec succès !"
			if [ $? -eq "1" ]; then
				Detect_USBHDD
			fi
		else	zenity --info \
			  --window-icon="$ICONE_REP/warning.png" \
			  --auto-close --auto_kill \
			  --text="Sauvegarde USB inachevée ! Une erreur inconnue s'est produite."
		fi
		Detect_USBHDD
	else 
		zenity --info \
			  --window-icon="$ICONE_REP/info.png" \
			  --text="Le logiciel est déjà lancé !"
	fi
	RETVAL=0
	;;
'stop')	
	Kill_PROC
	wait
	ps -A  | grep zenity | awk '{print $1}' | xargs kill -9 &
	RETVAL=0
	;;
esac
exit $RETVAL


fichier rsync.awk :
Code :
{
   if (index($0, "to-check=") > 0)
   {
	split($0, pieces, "to-check=");
	term = substr(pieces[2], 0, length(pieces[2])-1);
	split(term, division, "/");
	print (1-(division[1]/division[2]))*100"%"
   }
   else
   {
	print "#"$0;
   }
   fflush();
}


Fichier .$USER.exclusion :
Code :
/home/utilisateur/Musique
/home/utilisateur/Images
/home/utilisateur/telechargement
/home/utilisateur/.wine
/home/utilisateur/.VirtualBox
/home/utilisateur/.PlayOnLinux
*.bak
*.~


Cette discussion est classée dans : sauvegarde, rep, usb, zenity, rsync


Répondre à ce message

Sujets en rapport avec ce message

pb de sauvegarde avec pythonwin [ par vivelesgnous ] bonjour je débute sous python et je n'arrive pas à sauvegarder mes travaux. j'ai télécharger pythonwin 2.3.5 ainsi que pyton 2.3.5 et je travaille sou Parcourir sa BDR [ par skools ] Bonjour à tousVoilà: je suis loin d'être un pro en programmation, et encore moins en manipulations diverses sur la base de registre, et pourtant, je c Passage de parametres [ par dahrprog ] Bonjour :) , je viens de monter un petit programme de sauvegarde automatisé , g deux fichiers Python , une pour l'interface , les bouttons , parcourir


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales