Pages : 1
#1 Le 29/01/2010, à 20:57
- RastaYoupi
Problème script synchro
Salut à tous,
J'espère que je me suis pas gouré mais je vois pas où je pourrai mettre mon sujet.
Modo soyez indulgent ^^
Le topo, j'ai un système live sur une clef usb et je veux synchroniser le home de ma clef avec un répertoire de mon poste fixe.
Pour cela j'ai commencé par identifier ma clef de façon unique avec Udev, au passage si quelqu'un sait pourquoi je ne vois plus ma clef en faisant un fdisk -l, je devrai '"normalement" voir /dev/lenomdemaclef.
Bref à chaque connexion de la clef une règle Udev appelle u script pour faire une synchro.
J'ai un peu pris pas mal de bout de script à droite, à gauche et presque tout marche sauf l'affichage graphique.
Du moins je veux juste une barre de progression et un pop up pour dire que la synchro est terminée.
Je me suis inspiré du code de "koderez" dans ce topic http://forum.ubuntu-fr.org/viewtopic.php?id=82232&p=12
Attention c'est peu être un peu le fouillis, fin si vous comprenez pas certaines choses dite moi :-)
Le code:
#! /bin/sh
######################################################################################
# Script de gestion de connexion et sauvegarde du /home de la clef sur le poste fixe #
######################################################################################
afficheTaille () {
taille=$(sed '/\./! s/^.*$/&.00/' <<< $1)
i=1
while [[ ${#taille} -ge 7 ]]; do
taille=$(bc <<< "scale=2;$taille/1024")
((i+=1))
done
case $i in
1) taille+=" octets" ;;
2) taille+=" Ko" ;;
3) taille+=" Mo" ;;
4) taille+=" Go" ;;
esac
echo $taille
}
#-------------------------------------------------------------------------------------
# Déclaration des variables
#-------------------------------------------------------------------------------------
# Paramètres d'identification de la clef
DEVTYPE="usb"
ID_SERIAL_SHORT="A500000000026452"
KEY_SYNC=/dev/LiveUSB2
# Répertoires sources et destination
SRC_DIR=/home/leseb/MOUNT/
DEST_DIR=/home/leseb/udevsync/
MONT_POINT=/home/leseb/MOUNT/
# Fichiers de log horodatés
BKP_DATE=`date +"%Y-%m-%d_%H-%M"`
LOG_FILE=/tmp/Logs_Sync/sdBackup_${BKP_DATE}.log
BKP_LOG_FILE=$DEST_DIR/Logs_Sync/sdBackup_${BKP_DATE}.log
RSYNC_ERR=/tmp/rsync.err
#------------------------------------------------------------------------------------
# Algo
#------------------------------------------------------------------------------------
# Initialisation du fichier de log
echo "Backup du $BKP_DATE" >> $LOG_FILE
echo "Début à `date +'%H:%M:%S'`" >> $LOG_FILE
if [ "$ACTION" = "add" ] ; then
mount $KEY_SYNC $MONT_POINT
echo "Clef "$ID_MODEL" montée ("$ACTION"), backup en cours" >> $LOG_FILE
echo "0" > nb
DEBUT=$(date +%s)
rsync -p -r $SRC_DIR "$DEST_DIR"
$SRC_DIR/ $DEST_DIR 2>>$RSYNC_ERR | sed '
/to-check=/! {
/^sending/ {d;q;}
/\/$/ {d;q;}
/^sent/ {s/^.*$/echo "&" \>\/tmp\/rapport\.txt/e;d;q;};
/^total/ {s/^.*$/echo "&" \>\>\/tmp\/rapport\.txt/e;d;q;};
/^.\{43\}/ {s/\(^.\{20\}\).*\(.\{20\}$\)/echo \$\(\(\$\(cat nb\) + 1\)\) \> nb; echo "\1\[...\]\2" \>\/tmp\/svgrd_sed\.txt/e;d;q;};
/^.\{43\}/! {s/^.*$/echo \$\(\(\$\(cat nb\) + 1\)\) \> nb; echo "&" \>\/tmp\/svgrd_sed\.txt/e;d;q;};
}
/to-check=/ {
s/.*=\(.*\)\/\(.*\))/echo "#`echo "scale=2;\(\2-\1\)\*100\/\2" | bc | cut -d\. -f1`% (\$\(\(\2 - \1\)\) fichiers sur \2\) > \$\(cat \/tmp\/svgrd_sed\.txt\)"\; echo "scale=2;\(\2-\1\)\*100\/\2" | bc/e
}
' | zenity --progress --width=580 --title="Home - synchronisation" --text="Initialisation de la sauvegarde..." --percentage=0 --auto-close &
while true; do
sleep 1
if [ -z "$(pidof zenity)" ]; then
pkill rsync
break
fi
done
FIN=$(date +%s)
TEMPS=$(($FIN-$DEBUT))
TP_HEU=$(sed 's/^.$/0&/' <<< $(($TEMPS/3600)))
TP_TMP=$(($TEMPS%3600))
TP_MIN=$(sed 's/^.$/0&/' <<< $(($TP_TMP/60)))
TP_SEC=$(sed 's/^.$/0&/' <<< $(($TP_TMP%60)))
TP=$(echo "$TP_HEU:$TP_MIN:$TP_SEC")
ERR=$(cat $RSYNC_ERR)
if [[ ${#ERR} -ne 0 ]]; then
zenity --error --title="svgrd" --text="Problème lors de la sauvegarde du répertoire <b>$SRC</b>.\n\n<b><span color='red'>$ERR</span></b>."
rm $RSYNC_ERR
else
NB_FICH=$(cat nb)
ENVOI=$(afficheTaille $(cat /tmp/rapport.txt | grep sent | cut -d' ' -f2))
RECU=$(afficheTaille $(cat /tmp/rapport.txt | grep sent | cut -d' ' -f6))
VITESS=$(afficheTaille $(cat /tmp/rapport.txt | grep sent | cut -d' ' -f9))
zenity --info --title="svgrd" --text="Sauvegarde du répertoire\n<b>$SRC</b>\nefféctuée avec succès.\n$NB_FICH fichiers synchronisés\n\nEnvoyé:\t$ENVOI\nReçu:\t$RECU\nTemps:\t$TP\nTransfert:\t$VITESS/sec"
rm nb
fi
# Copie du log sur le répertoire de synchro
cp -f $LOG_FILE $BKP_LOG_FILE
fi
if [ "$ACTION" = "remove" ] ; then
umount -f $KEY_SYNC >> $LOG_FILE
echo "Clef "$ID_MODEL" démontée ("$ACTION")" >> $LOG_FILE
fi
#------------------------------------------------------------------------------------
# EOF
#------------------------------------------------------------------------------------
La partie qui ne fonctionne pas et la partie de l'affichage de la barre de progression et je capte pas vraiment pourquoi. Sinon la clef se monte bien et la synchro nickel.
Merci d'avance à tous
Dernière modification par RastaYoupi (Le 29/01/2010, à 21:21)
Hors ligne
#2 Le 31/01/2010, à 13:42
- RastaYoupi
Re : Problème script synchro
Personne ?
Hors ligne