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 12/06/2010, à 09:24

fabux

Conseil sur mon script de save rsync

Salut,

je suis une buse en script mais j'en ai un de sauvegarde rsync que j'utilise depuis un moment (et qui fonctionne), et je voulais avoir vos avis pour qu'il soit plus propre et quelles choses manque (notamment pour formatage/installe Lucid sans me casser la tête)
1- je sauvegarde la liste des paquets (il faut que j'ajoutes les sources.list)
2- je sauvegarde mon /home (sans .gvfs)
3- je compacte ce qui a été effacé (au cas ou je me rends compte, par exemple, que j'ai, enfin ma femme big_smile, effacé un dossier image avant ma save)
4-je démonte et coupe l'alim du disque.

En plus des trucs à sauvegarder qu'il me manquerait, je voudrait aussi récupérer les logs de rsync mais je ne trouve pas comment faire.
Voulait savoir aussi s'il n'y avait pas moyen de compresser directement les fichiers supprimés: aujourd'hui je les stocks dans un dossier qu'ensuite je compresse, ce qui fait double travail (à mon avis)
Le script (j'ai ajouté un morceau à la fin que je n'ai pas encore intégré c'est pour ça qu'il est commenté), avec votre indulgence merci wink

edit 06/2011: Je laisse la version originale ci-dessous mais actuellement j'en suis . J'ai enfin une piste pour l'extinction du disque qui ne marchait plus depuis Maverick.

#!/bin/sh
#Script de sauvegarde réalisé par Fabux 
#Source script Linux_pratique + doc Ubuntu + Forum Ubuntu
#
# à noter l'usage des ">" : un seul ">" renvoie le contenu du terminal dans le fichier indiqué en écrasant tout ce que contient déjà ce fichier.
# ">>" renvoie le contenu du terminal sans écraser ce que contient déjà le fichier.
# Le chiffre "2" suivi d'un seul ">" renvoie seulement les messages d'erreurs générés par le processus dans le fichier indiqué
# en écrasant le contenu de ce fichier. "2>>" renvoie les erreurs sans écraser le contenu du fichier
#
#
#Vérification de la présence du disque de sauvegarde

if [ ! -e "/media/ExtHome/" ]
then
echo "Erreur, le volume de sauvegarde est absent.
Merci de brancher le disque Externe."
exit
fi

#préparation des variables
histor=/media/ExtHome/histo_apt.log
ZEDATE=`date +%Y-%m-%d`
#
# C'est parti...
# Démarrage de la synchro
echo " La sauvegarde va démarrer dans 5 secondes. CTRL+C pour annuler.."
sleep 5
echo "Création de l'historique d'Apt-get "
dpkg --get-selections > $histor$ZEDATE    
echo "C'est fait on passe à la save du Home"
sleep 1
#creation du fichier des fichiers supprimes
mkdir -p /media/ExtHome/CorbeilleSave/${ZEDATE}/


#rajouter -- progress une fois la première save faite
#.gvfs est retiré car provoque une erreur
rsync -az --stats --progress --delete --backup --ignore-errors --force --filter "- .gvfs" \
    --backup-dir=/media/ExtHome/CorbeilleSave/${ZEDATE}/ \
    /home/ /media/ExtHome/save


#Compactage + datage de la corbeille de la save
    cd /media/ExtHome/CorbeilleSave

        echo " "
        echo " Compactage de la Corbeille "
    tar -czf Trash${ZEDATE}.tgz ${ZEDATE}
    echo " La Corbeille compactée s'appel désormais: "
    echo " Trash"$ZEDATE".tgz  "
sleep 2
    echo " "    
sleep 1    
#Suppression de la corbeille non compactée
    echo " Suppression des résidus de corbeille"
    cd /media/ExtHome/CorbeilleSave
    rm -R $ZEDATE
    echo "C'est fait !!"
    echo "Dans 5 secondes le disque sera démonté et l'alim éteinte"
cd /tmp #Pour pouvoir démonter le disque

#script ~/.alimddext .sh
sleep 5
echo "On démonte"
sudo umount /media/ExtHome
sudo umount /media/DosBuntu
echo "Démontage effectué on passe à la coupure électrique"
cd /sys/bus/usb/devices
bon_usb=$(grep -H JMicron usb?/?-?/manufacturer | cut -d"/" -f1,2)
cd ${bon_usb}/power
sudo sh -c 'echo "suspend" > level'
sudo -k  ## la prochaine fois qu'on utilise sudo, demande de mot de passe
sleep 6  ## 6 secondes par précaution
echo "alimentation Disque Dur externe coupée"
#fin script .alimddext
echo "Au revoir - oOo - "

exit

#aller voir http://forum.ubuntu-fr.org/viewtopic.php?id=109673 pour supprimer les plus vieux de la corbeille
# Insertion de la date à la fin de la liste d'erreur si le fichier backuperror n'est pas vide (c'est à dire s'il y a des erreurs),
# ce que vérifie l'option "-s" :
#if [ -s $backup ]; then
#{
#  date >> $backup
#}
#fi

Les différents echo c'est pour me laisser le temps de lire big_smile et vous aurez compris je penses que je fais ma save sur mon disque monté dans /media/ExtHome.

Dernière modification par fabux (Le 01/06/2011, à 11:41)

Hors ligne

#2 Le 12/06/2010, à 11:07

Compte supprimé

Re : Conseil sur mon script de save rsync

Bonjour,

Tout d'abord, le script que tu as développé fonctionne.
C'est déjà bien à la base.

Maintenant tu souhaite qu il soit plus propre... Je ne sais pas si c'est vraiment le lieu pour apprendre à faire des scripts propre. Je te conseil des site tel que www.developpez.com/.

Les remarques que je pourrais te faire :
- manque la version et la date au début du script
- beaucoup trop de choses codé en dure dans le code
(exemple cd /media/ExtHome/CorbeilleSave)
- commentaires en francais qui n'est pas la langue par défaut sous linux
- les echo sont fait sur la sortie par défaut... C'est pas très standard.
- des "constantes" en milieu de code au lieu de les mettre au début
- pas de fonctions définie => ca manque de modularité
- manque de test - il faudrait tester chaque retour de commande pour savoir si tout se passe bien
- a quoi servent tout ces sleep ? (oui je sais à faire une tempo mais pourquoi ?)

En revanche
- c'est indenté
- l'effort de commentaire permet de comprendre le sens général

neopingoo

#3 Le 12/06/2010, à 13:45

fabux

Re : Conseil sur mon script de save rsync

Déjà : merci pour les commentaires smile

Cependant, c'est mon script à moi pour moi et comme j'ai prévenu je suis une buse tongue donc la version + date du script, commentaires en français bah...je fais qu'est ce que je veux d'abord lol C'est vrai que ça coute rien, mais je n'en vois pas bien l'intérêt dans le cadre d'un script perso?
Mais je note, ne serait-ce que pour le jour où je serais capable de proposer quelque chose (ça laisse de la marge et du temps pour les vrai codeurs qui sont ici wink )

Pour les trucs codés en dur, effectivement, il faudrait peut-être que j'ajoutes des constantes en tête, ce qui serait en plus un peu plus modulable.

Les echos sur la sortie, c'est parce qu'au démarrage je veux voir si tout se passe bien, et voir ou il en est vers la fin. Même chose pour les sleep, sert à rien sauf pour me laisser le temps de réfléchir (pour le ctrl+c), et de lire pour le reste. Seul le sleep de fin avant extinction me semble effectivement utile et encore, mais dans le doute, je préfère le laisser pour être sûr que la synchro soit bien fini.

Pour les "constantes" au milieu du code tu doit parler je penses de bon_usb=$(grep -H JMicron usb?/?-?/manufacturer | cut -d"/" -f1,2). Je m'en suis rendu compte, mais c'est parce qu'en fait c'est tiré d'un autre script que j'ai. J'ai juste fais un copier/coller big_smile

pas de fonctions définie : c'est à dire? du temps où je faisait du basic (si si sur cpc 6128) faire chaque bloc et faire des goto? c'est ce que tu veux dire? si c'est ça je vois pas bien comment faire.

manque de test - il faudrait tester chaque retour de commande pour savoir si tout se passe bien oui enfin le début je le vois quand je lance mon script (d'où les sleep pour me laisse le temps de voir), ensuite rsync ça défile...mais c'est aussi pour ça que je demandais s'il y avait moyen de récupérer tout les logs de rsync (ou en gros me mettre dans un .txt tout ce que m'affiche mon terminal).

c'est indenté: ce qui veut dire ? big_smile (buse inside j'avais prévenu)

En tout cas dès que j'ai 2 minutes pour m'en occuper tranquillement, notamment mettre plus de constante en tête (mais je laisserai mes commentaires en french tongue)

Bien sûr je suis preneur d'autres commentaires/critiques...

Hors ligne

#4 Le 12/06/2010, à 14:02

Compte supprimé

Re : Conseil sur mon script de save rsync

Mes remarques sont dans l'optique justement de proposer ton scripts à d'autres.

Les echos sur la sortie, c'est parce qu'au démarrage je veux voir si tout se passe bien

Je préfère le fichier de log que je peux consulter après. Pendant le démarrage d'une machine je fais parfois autre chose...

d'où les sleep pour me laisse le temps de voir),

Attention de ne pas justement en devenir "esclave". J'aime bien les scripts qui automatise tout même les vérifications et qui envoie un mail en cas de problème.

indenté veux dire que tu as correctement mis des tabulations à certains endroits pour être plus lisible.

Pour l'histoire des fonctions, je te propose de lire cette page :
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-8.html

Ton script pourrais ressembler à :

testPresenceDisque
synchro
compactage
suppressionCorbeille
demontage
coupure

#5 Le 12/06/2010, à 14:56

fabux

Re : Conseil sur mon script de save rsync

Ok pour les fonctions (vu la taille est-ce vraiment nécessaire, je mets ça de côté pour le moment mais le garde pas loin)

Pour l'echo, c'est justement une de mes demandes: comment faire pour récupérer tout (je voudrais tout de même les 2: echo + log )?

Hors ligne

#6 Le 13/06/2010, à 12:49

Compte supprimé

Re : Conseil sur mon script de save rsync

Il y a plusieurs solutions...

Celle que j'applique :

echo "Message" | tee -a $ERRORLOG
commande &2>1 | tee -a $ERRORLOG

#7 Le 13/06/2010, à 14:18

frafa

Re : Conseil sur mon script de save rsync

Bonjour,
pour tout recuperer (dans un fichier /tmp/monscript-debog.txt):

#!/bin/bash
exec >& >(tee -a /tmp/monscript-debog.txt)
#la suite de ton script...

EDIT: je rend a cesar ce qui lui appartiens, de memoire cette astuce est de ToTor smile

Dernière modification par frafa (Le 13/06/2010, à 14:20)

Hors ligne

#8 Le 13/06/2010, à 20:56

fabux

Re : Conseil sur mon script de save rsync

Je viens de l'ajouter j'attends demain (que ma save se lance) pour voir le résultat mais big thanks d'avance smile

Hors ligne

#9 Le 13/06/2010, à 22:27

fabux

Re : Conseil sur mon script de save rsync

[buse] Euh...:D
si je comprends ta méthode neopingoo, il faudrait que je puisse appliquer le echo de la ligne 1 à tout mon script (la 2 semblant être pour les erreurs, que j'appliquerai plus si je fais des fonctions avec test comme tu me le conseil).
À moins d'ajouter la redirection à chaque fin de commande?
Ce qui m'emmène apparemment au exec de frafa. (qui à priori inclus les erreurs et la sortie "normal")

Du coup, j'ai voulu appliquer ta méthode frafa (enfin celle de ToTor tongue), ça semble être ce que je recherche, mais dès que je le mets dans mon script

save_total.sh: 2: Syntax error: redirection unexpected

où que je mette la ligne, ça me réponds ça.
Après de rapide test, je penses que ce qui coince c'est la redirection si je lance le script avec sudo. Mais sans, je ne peux copier le /home de ma femme (ou alors m'expliquer merci).
J'ai bien vu ça, mais j'avais un doute sur appliquer un sh -c dans un script et j'avoue j'ai testé, et bin bizarrement j'ai pas réussi big_smile.

Je chercherais un peu plus cette semaine les pistes que vous me lancez, mais en tout cas merci à vous pour tenter d'aider la buse que je suis smile smile smile [/buse]

edit: exec marche pas pour shabang sh mais bien pour bash, m'en vais sur abs réviser un peu, mais pour la suite de mon script ça risque de changer qqch?

Dernière modification par fabux (Le 13/06/2010, à 23:19)

Hors ligne

#10 Le 14/06/2010, à 01:28

olaf.10

Re : Conseil sur mon script de save rsync

Salut Fabux,

C'est une commande bash donc... remplace /bin/sh par /bin/bash au début de ton script. wink
Pour sauvegarder les sources.list tu as cette possibilité :

echo "Copie des sources.list"
mkdir -p /media/ExtHome/apt/sources.list.d
cp -f /etc/apt/sources.list.d/* /media/ExtHome/apt/sources.list.d
cp -f /etc/apt/sources.list /media/ExtHome/apt

et pour le log on peut ajouter ceci :

#Enregistrement du fichier de log avant démontage
    cat /tmp/monscript-debog.txt > /media/ExtHome/rsync.log$ZEDATE

Ce qui donne au final :

#!/bin/bash
#Fichier de log temporaire
    exec >& >(tee -a /tmp/monscript-debog.txt)

#Script de sauvegarde réalisé par Fabux 
#Source script Linux_pratique + doc Ubuntu + Forum Ubuntu
#
# à noter l'usage des ">" : un seul ">" renvoie le contenu du terminal dans le fichier indiqué en écrasant tout ce que contient déjà ce fichier.
# ">>" renvoie le contenu du terminal sans écraser ce que contient déjà le fichier.
# Le chiffre "2" suivi d'un seul ">" renvoie seulement les messages d'erreurs générés par le processus dans le fichier indiqué
# en écrasant le contenu de ce fichier. "2>>" renvoie les erreurs sans écraser le contenu du fichier
#
# Le caractère "&" suivi d'un seul ">" renvoie le contenu du terminal et les messages d'erreurs dans le fichier indiqué
# en écrasant le contenu de ce fichier. "&>>" renvoie le contenu du terminal et les erreurs sans écraser le contenu du fichier


#Vérification de la présence du disque de sauvegarde
if [ ! -e "/media/ExtHome/" ]
then
    echo "Erreur, le volume de sauvegarde est absent.
    Merci de brancher le disque Externe."
    exit
fi


#préparation des variables
histor=/media/ExtHome/histo_apt.log
ZEDATE=`date +%Y-%m-%d`


# C'est parti...
# Démarrage de la synchro
echo " La sauvegarde va démarrer dans 5 secondes. CTRL+C pour annuler.."
sleep 5

#Copie des sources.list
echo "Copie des sources.list"
mkdir -p /media/ExtHome/apt/sources.list.d
cp -f /etc/apt/sources.list.d/* /media/ExtHome/apt/sources.list.d
cp -f /etc/apt/sources.list /media/ExtHome/apt

echo "Création de l'historique d'Apt-get "
dpkg --get-selections > $histor$ZEDATE    
echo "C'est fait on passe à la save du Home"
sleep 1
#creation du fichier des fichiers supprimes
mkdir -p /media/ExtHome/CorbeilleSave/${ZEDATE}/


#rajouter -- progress une fois la première save faite
#.gvfs est retiré car provoque une erreur
rsync -az --stats --progress --delete --backup --ignore-errors --force --filter "- .gvfs" \
    --backup-dir=/media/ExtHome/CorbeilleSave/${ZEDATE}/ \
    /home/ /media/ExtHome/save


#Compactage + datage de la corbeille de la save
    cd /media/ExtHome/CorbeilleSave

        echo
        echo " Compactage de la Corbeille "
    tar -czf Trash${ZEDATE}.tgz ${ZEDATE}
    echo " La Corbeille compactée s'appel désormais: "
    echo " Trash"$ZEDATE".tgz  "
sleep 2
    echo  
sleep 1    
#Suppression de la corbeille non compactée
    echo " Suppression des résidus de corbeille"
    cd /media/ExtHome/CorbeilleSave
    rm -R $ZEDATE
    echo "C'est fait !!"
    echo "Dans 5 secondes le disque sera démonté et l'alim éteinte"
cd /tmp #Pour pouvoir démonter le disque


#Enregistrement du fichier de log avant démontage
    cat /tmp/monscript-debog.txt > /media/ExtHome/rsync.log$ZEDATE


#script ~/.alimddext .sh
sleep 5
echo "On démonte"
sudo umount /media/ExtHome
sudo umount /media/DosBuntu
echo "Démontage effectué on passe à la coupure électrique"
cd /sys/bus/usb/devices
bon_usb=$(grep -H JMicron usb?/?-?/manufacturer | cut -d"/" -f1,2)
cd ${bon_usb}/power
sudo sh -c 'echo "suspend" > level'
sudo -k  ## la prochaine fois qu'on utilise sudo, demande de mot de passe
sleep 6  ## 6 secondes par précaution
echo "alimentation Disque Dur externe coupée"
#fin script .alimddext
echo "Au revoir - oOo - "

exit


#aller voir http://forum.ubuntu-fr.org/viewtopic.php?id=109673 pour supprimer les plus vieux de la corbeille
# Insertion de la date à la fin de la liste d'erreur si le fichier backuperror n'est pas vide (c'est à dire s'il y a des erreurs),
# ce que vérifie l'option "-s" :
#if [ -s $backup ]; then
#{
#  date >> $backup
#}
#fi

J'en ai profité pour compléter ton texte sur les redirections > 2> &>.
A+

Hors ligne

#11 Le 14/06/2010, à 08:39

fabux

Re : Conseil sur mon script de save rsync

Je viens de l'ajouter à l'arrache et testerais plus tard mais en tout cas merci Olaf.10 smile
J'avais bossé un peu hier soir dessus, ne serait-ce remettre plus de constante comme me le conseillais neopingoo (ce qui m'a permis de voir que je fais des cd puis la commande au lieu de tout faire d'un coup et c'est effectivement plus pratique pour ajouter des lignes). J'ai des sudo dans mes lignes à la fin ce qui n'est pas trop bon, faut que je trouve comment les virer. Et cette histoire de redirection qui ne marche pas si je lance mon script avec sudo (sans j'ai bien les logs mais je ne peux pas tout copiers)

Par contre, pour le renvoi des logs, je fait un cp plutôt qu'un cat. c'est quoi le moins pire? je penses que cp doit être plus rapide que cat dans le cas d'un long log, mais je me trompe peut-être.
Voilà où j'en suis

#!/bin/bash
#
#Script de sauvegarde réalisé par Fabux 
#Source script Linux_pratique + doc Ubuntu + Forum Ubuntu
#
#merci à
#neopingoo
#frafa
#indirectement Totor
#Olaf.10
#
#Version 0.5 14/06/2010 
#
# todo:	virer les "cd" en trop
# 	virer les sudo
#	faire des fonctions
#	revoir les echos (couleur et forme) pour plus de visibilité/recherche dans log de save
#
#Changelog :
#14/06/2010	v0.5: 	ajout sources.list
#
#13/06/2010	v0.4:	ajout date + numéro version
#		 	mise en place plus de constante
#			tentative save log script
#
#Date ???	v0.3:	ejection disque 
#
#Date ???	v0.2:	histo_apt
#			test présence disque 
#
#02/2009 	v0.1:	création du script avec juste rsync + compactage corbeille,

#
#ERRORLOG=/tmp/tintin.txt
#
#echo "Message" | tee -a $ERRORLOG
#
#commande &2>1 | tee -a $ERRORLOG
#pb redirection avec sudo

#préparation des variables

ZEDATE=`date +%Y-%m-%d`			#date du jour
LOGscript=/tmp/monscript.log		#fichier log du script
ExtHome=/media/ExtHome			#partition qui aura la save	
DosBuntu=/media/DosBuntu		#2ème partition du même disque
histor=$ExtHome/histo_apt.log		#fichier historique des paquets installés
DiskSave=$ExtHome/save			#dossier de save du /home
CorbeilleSave=$ExtHome/CorbeilleSave	#dossier des suppressions de rsync
nomdisk=JMicron				#lsusb du disk

#renvoi echo dans log
exec >& >(tee -a $LOGscript)

#Vérification de la présence du disque de sauvegarde
	if [ ! -e $ExtHome ]
then
  echo "Erreur, le volume de sauvegarde est absent.
	Merci de brancher le disque Externe."
exit
	fi

#
# C'est parti...
#
   echo " La sauvegarde va démarrer dans 5 secondes. CTRL+C pour annuler.."
sleep 5

   echo "Création de l'historique d'Apt-get "
dpkg --get-selections > $histor$ZEDATE	

   echo "Copie des sources.list"
mkdir -p $ExtHome/apt$ZEDATE/sources.list.d
cp -f /etc/apt/sources.list.d/* $ExtHome/apt$ZEDATE/sources.list.d
cp -f /etc/apt/sources.list $ExtHome/apt$ZEDATE

   echo "C'est fait on passe à la save du Home"
sleep 1

#creation du fichier des éléments supprimes
mkdir -p $CorbeilleSave/${ZEDATE}/

# synchro dossier local <-> disk de save
# ajouter -- progress une fois la première save faite
#.gvfs est retiré car provoque une erreur
rsync -az --stats --progress --delete --backup --ignore-errors --force --filter "- .gvfs" \
	--backup-dir=$CorbeilleSave/${ZEDATE}/ \
	/home/ $DiskSave

#Compactage + datage de la corbeille de la save
cd $CorbeilleSave
   echo " "
   echo " Compactage de la Corbeille "
tar -czf Trash${ZEDATE}.tgz ${ZEDATE}
   echo " La Corbeille compactée s'appel désormais: "
   echo " Trash"$ZEDATE".tgz  "
sleep 2
   echo " "	
sleep 1	

#Suppression de la corbeille non compactée
   echo " Suppression des résidus de corbeille"
#cd $CorbeilleSave
#rm -R $ZEDATE
rm -R $CorbeilleSave/$ZEDATE
   echo "C'est fait !!"
   echo "Dans 5 secondes le disque sera démonté et l'alim éteinte"

#Changement de répertoire pour pouvoir démonter le disque
cd /tmp 	

#copie log de la save sur disk externe
cp $LOGscript $ExtHome/save${ZEDATE}.log

#Démontage des partitions et extinction du disque
#partie tiré du script ~/.alimddext.sh
#voir pour retirer les sudo
sleep 5
echo "On démonte"
sudo umount $ExtHome
sudo umount $DosBuntu
echo "Démontage effectué on passe à la coupure électrique"
cd /sys/bus/usb/devices
bon_usb=$(grep -H $nomdisk usb?/?-?/manufacturer | cut -d"/" -f1,2)
cd ${bon_usb}/power
sudo sh -c 'echo "suspend" > level'
sudo -k  ## la prochaine fois qu'on utilise sudo, demande de mot de passe
sleep 6  ## 6 secondes par précaution
echo "alimentation Disque Dur externe coupée"
#fin script .alimddext
echo "Au revoir - oOo - "

exit

#aller voir http://forum.ubuntu-fr.org/viewtopic.php?id=109673 pour supprimer les plus vieux de la corbeille
# Insertion de la date à la fin de la liste d'erreur si le fichier backuperror n'est pas vide (c'est à dire s'il y a des erreurs),
# ce que vérifie l'option "-s" :
#if [ -s $backup ]; then
#{
#  date >> $backup
#}
#fi
# à noter l'usage des ">" : un seul ">" renvoie le contenu du terminal dans le fichier indiqué en écrasant tout ce que contient déjà ce fichier.
# ">>" renvoie le contenu du terminal sans écraser ce que contient déjà le fichier.
# Le chiffre "2" suivi d'un seul ">" renvoie seulement les messages d'erreurs générés par le processus dans le fichier indiqué
# en écrasant le contenu de ce fichier. "2>>" renvoie les erreurs sans écraser le contenu du fichier
#
# Le caractère "&" suivi d'un seul ">" renvoie le contenu du terminal et les messages d'erreurs dans le fichier indiqué
# en écrasant le contenu de ce fichier. "&>>" renvoie le contenu du terminal et les erreurs sans écraser le contenu du fichier

si je repost mon code, je virais les commentaires de début et de fin pour prendre un peu moins de place sur le serveur.

Pas trop le temps maintenant, mais je vais chercher (et finir par trouver) pour cette histoire de sudo. Je repasse plus tard, et viens pleurer si je trouve rien wink

Hors ligne

#12 Le 14/06/2010, à 23:36

fabux

Re : Conseil sur mon script de save rsync

J'ai passé un petit moment là-dessus, mais pour sudo + exec je penses avoir trouvé (je suis content mais un peu honte de le dire big_smile)

Si j'appel le chemin complet lancé par sudo (sudo ./home/fab.../monscript.sh), ça marche: j'ai l'écho et le .log smile

En fait, je lançais mon script avec un alias que je n'avais pas revérifié: alias savext='sudo sh /home/fab.../monscript.sh' et dans ce cas le exec marche pas: il faut ajouter l'option -c : alias savext='sudo sh -c /home/fab.../monscript.sh' et là ça à l'air ok.

Si tout se passe bien, je devrais voir la tronche de mes logs demain matin smile

Par contre, j'ai retiré l'option --append du tee: normalement ça recrée un nouveau fichier de log à chaque lancement du script.

Je vais sûrement ajouter une question au début du script pour confirmer son lancement (ce sera mieux que le ctrl+c que je laisserai pour dernier recours). Peut-être aussi ajouter un script de nettoyage apt + cache divers (j'en ai déjà une partie, faut que je complète avec la doc) avant d'executer le rsync.
Je pensais aussi trouver un moyen pour mettre des couleurs aux echo pour plus de visibilité dans les logs.
Et pis du coup, peut-être aussi créer un autre log que pour les erreurs s'il y en a (ce que neopingoo proposait mais que je ne voulais pas au départ). Et pis aussi...
Ça y est ça chauffe et vu le temps passé pour trouver ma boulette d'alias, je sens que je vais m'amuser pour les 10 prochaines années à implémenter tout ça lol

Hors ligne

#13 Le 15/06/2010, à 00:31

olaf.10

Re : Conseil sur mon script de save rsync

fabux a écrit :

Je viens de l'ajouter à l'arrache et testerais plus tard

Désolé, j'avais pas vu que tu avais édité ton post. ^^'

fabux a écrit :

j'ai retiré l'option --append du tee: normalement ça recrée un nouveau fichier de log à chaque lancement du script.

Affirmatif.

fabux a écrit :

Je vais sûrement ajouter une question au début du script

Voilà le bout de code qu'il te faut (pris dans un script perso) :

question="Prêt pour la sauvegarde [O/n] ? "
read -n1 -p"$question" READ
while [ 1 ]; do
	echo
	if [ "$READ" = "O" ]; then
		echo "C'est parti..."
		break
	fi
	if [ "$READ" = "n" ]; then
		exit
	fi
	read -n1 -p"$question" READ
done
fabux a écrit :

Je pensais aussi trouver un moyen pour mettre des couleurs aux echo pour plus de visibilité dans les logs.

Utilise des cadres de dièses, c'est assez efficace en matière de visibilité :

echo; echo
echo "################################"
echo "Mon texte"
echo "################################"
echo; echo
fabux a écrit :

Et pis du coup, peut-être aussi créer un autre log que pour les erreurs s'il y en a

Pour quoi faire ? Les erreurs seront déjà consignées dans le save${ZEDATE}.log.

Si tu as d'autres idées d'améliorations n'hésite pas. wink
A+

Hors ligne

#14 Le 15/06/2010, à 10:21

fabux

Re : Conseil sur mon script de save rsync

C'est pas drôle, tu m'a mâché tout le taf pour le read lol
Merci, je test ça plus tard (notamment voir si read tient compte de la casse du O) wink

Pour les echo, j'avais la même idée que ta proposition. Mais pour le fun, je voudrais ajouter des couleurs, pour les fois où j'ouvres les logs dans un éditeur qui les gères. (j'ai entraperçu vers où m'orienter)

Pour les erreurs de logs, ça me permettrais de voir en un coup d'œil si ça c'est mal passé.
Les logs que je récupère actuellement comprennent tout (ce que je voulais et ça marche), mais je ne les lis pas à chaque fois. Si j'ai une/des erreur(s) par endroit, je le verrais de suite: j'aurais un 2ème fichiers qui sera créé uniquement dans ce cas.

Je vais fouiller un peu, actualiser mon code et reposter dans mon 1er post dès que c'est fait.

En tout cas merci à tous pour votre investissement à tenter de me faire avancer wink

Hors ligne

#15 Le 16/06/2010, à 09:00

fabux

Re : Conseil sur mon script de save rsync

J'ai fais quelques essais pour comprendre les lignes que me proposes Olaf.10 et du coup j'en suis là pour cette partie

#!/bin/bash
question="Dans 5 secondes ça va se lancer \
N pour stopper?"
#il faut que je règle cette histoire d'alignement pour que ça s'affiche comme ça (retour à la ligne après "lancer")

read -t5 -n1 -p "$question" REPONSE
while [ REPONSE ]
do
echo
if [[ "$REPONSE" == "" ]]
then echo "c'est parti"
break
fi
if [[ "$REPONSE" == [nN] ]]
then
echo "on quitte"
exit
fi
echo "eh banane j'ai dis N !!!"
sleep 1
read -t5 -n1 -p "$question" REPONSE
done
exit # ← je l'ai mis uniquement pour mes tests avant de le mettre dans mon script

Il doit y avoir moyen de faire plus propre.

Pour les echo colorisé je suis parti à partir de ce post de z0rg> + le lien donné par Hizoka et du coup il vaut mieux utiliser NOIR="\033[1;0m" ou RED=`tput setaf 1` c'est quoi le mieux / plus simple à gérer? tput gère-t-il aussi les fonds de couleurs (genre bleu sur blanc...)? sur cette dernière question ça me gène pas trop d'être limité en couleur, et je n'ai pas encore cherché là-dessus.

Sinon je me poses toujours la question des différences entre {},[] [[ ]] ...je sais jamais lequel utilisé. Dans mon code ci-dessus, des fois simple crochet marche, et des fois il faut double (du coup j'ai mis d'ouble aussi pour reponse="" qui semble marcher sans. Olaf.10 tu mets des accolades alors que sans, ça semble fonctionner...si vous pouviez m'éclairer (ou m'envoyer balader sur une page si vous avez la flemme d'expliquer wink )

Hors ligne

#16 Le 30/06/2010, à 09:38

fabux

Re : Conseil sur mon script de save rsync

Je suis sur les logs d'erreurs.
J'ai testé

exec >& 2>(tee ${LOGerror})

mais ça veut pas. Mais si j'ai bien compris ce serait normal, je lui demande juste de renvoyer "bêtement" tout ce qu'il affiche, du coup il y a peu de chance qu'il y est des erreurs. Si je vire le >&: m'envoit bouler...
Je chercherai un peu plus tard mais si quelqu'un à une piste (pas forcément la réponse mais une piste)...

Pour les accolades, je penses avoir compris: c'est par souci de clarté et de compréhension. J'avais un exemple -de Totor me semble-t-il- mais je ne remets pas la main dessus (pour le moment)

edit: bah j'ai trouvé apparemment

exec 2> >(tee ${LOGerror})

J'ai juste une ligne en trop dans les logs d'erreur ensuite (la première quand je pose la question pour arrêter le script). Je vais chercher un peu.

Dernière modification par fabux (Le 30/06/2010, à 09:55)

Hors ligne

#17 Le 23/07/2010, à 09:54

fabux

Re : Conseil sur mon script de save rsync

Bon bin j'avance smile
J'en suis .
Du coup j'ai ajouté plein de ligne pour la gestion des couleurs, et me suis amusé un peu avec big_smile.
Juste une question: j'ai encore jamais utilisé mais à priori il va falloir que je m'oriente vers un gestionnaire de version (sûrement git), car ça commence à vite devenir le bor*** rien qu'avec mon script de save (qui fait 200 lignes avec la moitié de commentaires :lol): Faut pas que j'oublie d'enregistrer avec un autre nom, puis avec le nom "normal" (pour mon alias)...y'a pas moyen d'automatiser un git dans gedit, genre on fait enregistrer et ça commit tout seul (comme je risque d' oublier de le faire après chaque modif). Enfin vous voyez ce que je veux dire, non big_smile ?

Hors ligne

#18 Le 01/08/2010, à 20:15

rmy

Re : Conseil sur mon script de save rsync

Suite à ton message :
1/ Je n'ai pas lu ton script, je suis pire buse que toi de ce côté là
2/ Je réponds quand même à ta question sur les trucs à penser :
- ne pas sauver les .trash ?
- y ajouter le boulot de dev web si il se trouve dans /var/www ou dans /media/dev-www ou tout autre truc du genre qui ne se trouve pas par défaut dans le /home ?
- y ajouter les dossiers du genre /usr/bin si tu as des scripts perso stockés là bas ?
- ajouter une ligne qui commande un tshirt automatiquement sur thinkgeek à chaque sauvegarde réussie et me l'envoie en prépayant les frais de douane (je te file mon adresse perso par mp)

Hors ligne

#19 Le 01/08/2010, à 22:38

fabux

Re : Conseil sur mon script de save rsync

Merci de ton intervention.
1/ je me sens moins seul wink

2/- sauf erreur les .trash sont tous dans le home que je save complètement
- je suis pas dev web donc pas grave pour les var/www
- script perso dans mon /home
mais c'est vrai que c'est 2 points peuvent être utile pour d'autre.
- pour le tshirt lol : tu veux me ruiner ? je lance ma save quasi tous les jours wink tongue (et même moi j'en ai pas un de ces beaux habits)

Hors ligne

#20 Le 22/10/2010, à 08:47

fabux

Re : Conseil sur mon script de save rsync

Depuis mon passage à Maverick le echo suspend ne marche plus pour éteindre l'usb hmm (auto ou on marche, mais j'arrive pas à trouver autre chose qui ne m'envoit pas Argument invalide)
Ça le fait chez vous aussi ? Si oui vous connaissez la ligne pour Retirer le volume sans risque (ou éteindre l'usb?)
Je post ici avant d'ouvrir un autre thread

Hors ligne