Jaymzwise Posté(e) le 5 mars 2014 Posté(e) le 5 mars 2014 Je n'avais pas installé ipkg au moment où j'ai posé ma question. C'est vrai qu'une fois installé j'aurais dû le mentionner, désolé. J'ai comme toi le DS213J, je n'ai installé ipkg que pour installer vim et nail, j'éviterai de trop m'appuyer dessus, j'ai lu comme toi qu'il n'était pas forcément super stable sur ce modèle. Je pense que je suis tranquille pour un petit moment, mes sauvegardes sont en place et je peux m'envoyer les rapports de mes scripts rsync par mail, j'ai tout ce dont j'ai besoin Encore merci à toi et jlbn 0 Citer
jlbn Posté(e) le 5 mars 2014 Auteur Posté(e) le 5 mars 2014 (modifié) Bonjour, Puisque le sujet semble intéressé certains, et comme je n'avais pas vraiment trouvé mon bonheur lorsque je me suis décidé à faire mon propre script, voici le mien qui pourra je pense aider des débutants comme moi. Les fonctionnalités : sauvegarde en rsync au travers d'une connexion ssh par clé utilisation de l'option backup et backup-dir afin de conserver les fichiers supprimés sur la source dans un dossier jours utilisation de l'option partial et partial-dir pour conserver les fichiers en cours de transfert en cas de coupure de connexion création d'un fichier log journalier et d'un log d'erreur journalier envoi d'un mail spécifique en cas de réussite reprenant début de sauvegarde, fin de sauvegarde et dernières données stats du fichier log envoi d'un mail spécifique lorsque la sauvegarde est stoppée avant la fin (ce qui est mon cas via le planificateur et un "killall rsync" tous les matins à 9 heures envoi d'un mail spécifique en cas d'autres erreurs avec le log d'erreur en pièce jointe Suppression du dossier "jours" des fichiers supprimés sur la cible au bout de x jours suivant un paramètre "RETENTION" J'imagine que l'on peut faire mieux mais cela correspond à mes besoins et ça permet de combler quelques lacunes du module de base "sauvegarder et restaurer". Il y a par ailleurs des scripts plus élaboré sur le forum pour ceux qui veulent aller plus loin (gestion des sauvegardes tournante notamment ...) Ne pas oublier aussi de fixer des règles les plus strictes possibles dans le pare feu (en ce qui me concerne le serveur cible n'est accessible que en local ou via mon ip fixe), d'activer le blocage des ip, et j'en oublie sans doute d'autres. jlbn #!/bin/sh PATH=/bin:/usr/bin:/usr/syno/bin #Déclaration des variables date=`date +%y_%m_%d` LOG=/volume1/aaa/rsync/log #dossier des fichiers log EXCLURE=/volume1/aaa/rsync/exclure.txt #fichiers des éléments à exclure SOURCE=/volume1/aaa DEST=/volume1/aaa/bbb/ BACKUP=/volume1/aaa/suppr #Emplacement des dossiers journaliers des fichiers supprimés PARTDIR=/volume1/aaa/partial #Emplacement des fichiers partiels SERVEUR=util@adresse_ip #Nom du serveur cible PORT=5555 #Spécifie le numéro de port ssh RETENTION=4 #Nb de jours où les sauvegardes journalières des fichiers supprimés sont conservés RSA=/zzz/.ssh/id_dsa #ficher de la clé ssh SMTP=smtp.aaa.fr #serveur smtp pour l'envoi de mail via un smtp sans authentification ADRMAIL=votreadressemail.fr #Mail d'envoi et reception SENDMAIL=/yyy/my_sendmail #Chemin complet du script perl d'envoi des mail - Utilisation du script perl de CoolRaoul SUJET="DiskStation - Synology DiskStation" #Sujet des mails envoyés #Fin de déclaration des variables #Ecriture dans le log de la date et heure de lancement DEBUT="Lancement de la sauvegarde $(date +%A) $(date +%d) $(date +% $(date +%Y) à $(date +%H)h et $(date +%M)min" echo "" >$LOG/$date.log echo "========================================================================================================================" >> $LOG/$date.log echo "$DEBUT" >> $LOG/$date.log echo "========================================================================================================================" >> $LOG/$date.log echo "" >> $LOG/$date.log #Stock dans une variable les premières lignes du log pour réutilisation dans le mail STATLOG1=$(tail "$LOG/$date.log") #Lancement de la sauvegarde rsync -arv --stats --partial --partial-dir=$PARTDIR --delete --backup -e "ssh -p $PORT -i $RSA" --backup-dir=$BACKUP/$date/ --exclude-from=$EXCLURE $SOURCE $SERVEUR:$DEST >> $LOG/$date.log 2>$LOG/erreur-$date.log #Code de la sauvegarde STATUT=$? #Ecriture de la date et de l'heure de fin de la sauvegarde FIN="Fin de la sauvegarde $(date +%A) $(date +%d) $(date +% $(date +%Y) à $(date +%H)h et $(date +%M)min" echo "" >> $LOG/$date.log echo "========================================================================================================================" >> $LOG/$date.log echo "$FIN" >> $LOG/$date.log echo "========================================================================================================================" >> $LOG/$date.log #Stock dans une variable les dernières lignes du log pour réutilisation dans le mail STATLOG2=$(tail -n 19 "$LOG/$date.log") #Gestion du fichier d'erreur et envoi du mail en fonction du code statut de la sauvegarde if [ $STATUT -eq 0 ] then echo "La sauvegarde a reussi - Code statut = $STATUT $STATLOG1 $STATLOG2" | $SENDMAIL -s "$SUJET" -f "$ADRMAIL" -m $SMTP $ADRMAIL rm $LOG/erreur-$date.log elif [ $STATUT -eq 20 ] then echo "La sauvegarde a ete stoppee par le planificateur ou manuellement - Code statut = $STATUT $STATLOG1 $STATLOG2" | $SENDMAIL -s "$SUJET" -f "$ADRMAIL" -m $SMTP $ADRMAIL rm $LOG/erreur-$date.log else echo "La sauvegarde a echoue - Code statut = $STATUT $STATLOG1 $STATLOG2" | $SENDMAIL -s "$SUJET" -f "$ADRMAIL" -m $SMTP $ADRMAIL "$LOG/erreur-$date.log" fi #Supression du dossier des fichiers supprimés le plus ancien selon la variable RETENTION définie en jours ssh $SERVEUR "cd '$BACKUP' && find . -type d -maxdepth 1 -mindepth 1 -mtime +'$RETENTION' | xargs rm -r" exit Modifié le 5 mars 2014 par jlbn 0 Citer
jlbn Posté(e) le 5 mars 2014 Auteur Posté(e) le 5 mars 2014 J'ai modifié la manière de gérer les dossiers de backup. cette fois, le script ne se base plus sur le "mtime" mais sur le nombre de dossiers présent dans le dossier backup. Je pense que ça permet de gérer le cas où il n'y a pas de fichiers supprimés dans la source donc pas de dossier daté du jour de la sauvegarde. J'imagine qu'il y a plus simple mais ça marche : #On conserve les x derniers dossiers du repertoire BACKUP en fonction de la valeur de RETENTION NBREP=$(ssh $SERVEUR "ls -1d $BACKUP/* | wc -l") if $NBREP<=$RETENTION then exit 1 else let NBLISTE=$NBREP-$RETENTION ssh $SERVEUR "ls -1d $BACKUP/* | head -n $NBLISTE | xargs rm -r" fi 0 Citer
jlbn Posté(e) le 6 mars 2014 Auteur Posté(e) le 6 mars 2014 Bonsoir à tous, encore une question. J'ai activé pour ma sauvegarde rsync l'option "stats" que je redirige dans un fichier log et dans des variables pour une réutilisation dans un mail. hors, aussi bien le fichier log que le mail ne gèrent correctement les caractères accentués. Par exemple un dossier "Médiathèque" devient : "M#303#251diath#303#250que" Je crois comprendre que c'est un problème d'encodage. je ne sais si c'est utile de le préciser, mais je visualise les fichiers log avec notepad++ mais la fonction d'encodage ne change rien. Y a t-il un moyen pour faire apparaître correctement ces caractères ? Merci de vos retours 0 Citer
CoolRaoul Posté(e) le 7 mars 2014 Posté(e) le 7 mars 2014 DSM n'inclue pas par défaut les commandes ("locale", "localedef") et fichiers nécessaires au support *en ligne de commande* des caractères internationaux (codage UTF-8 par exemple). Tous le reste du système par contre est entièrement localisé (GUI d’administration, système de fichier, etc...) bien évidemment. Il est cependant possible d'intégrer ce support en récupérant et copiant quelques fichiers à partir des toolchains officielles. Ca à déja été discuté dans le forum. J'ai aussi gardé un bookmark sur ce tuto que j'ai trouvé clair et succinct. PS: faudrait envisager de créer des sujet spécifiques quand il s'agit de problèmes différents sinon ce fil risque de devenir un fourre-tout illisible. 0 Citer
jlbn Posté(e) le 7 mars 2014 Auteur Posté(e) le 7 mars 2014 Je crée un autre sujet sur le support des langues, merci 0 Citer
jlbn Posté(e) le 29 juillet 2016 Auteur Posté(e) le 29 juillet 2016 je déterre mon sujet ! utilisateur depuis maintenant plus de 2 ans d'un script permettant la sauvegarde en rsync, celui-ci marche parfaitement bien et répond (presque) à mes besoins. en effet je souhaiterais maintenant prioriser la sauvegarde de certains dossiers. Je m'explique : j'ai par exemple des dossiers à sauvegarder : # inclusion des répertoires à sauvegarder et de leur contenu + svg_dossier2/ + svg_dossier2/** + svg_dossier1/ + svg_dossier1/** + commun/ + Commun/** + Backup/ + Backup/** + web/ + web/** et je souhaite que la sauvegarde se fasse dans cet ordre, d'abord le dossier et son contenu svg_dossier2, puis svg_dossier1, puis ... Je souhaite cet ordre précis dans le cas ou le volume de données à sauvegarder est important, la sauvegarde se fait dans l'ordre indiqué et traite les dossiers importants, puis s'il reste du temps (je fais un killall rsync à 9h), traite le reste. Sinon, la sauvegarde reprendra un peu plus tard et traitera la liste des dossiers dans le même ordre la fois suivante. je pensais qu'avec un --include-from, ça fonctionnerait mais non, les dossiers sont traités récursivement selon l'ordre trouvé dans la source (contenu de volume1 chez moi). J'ai cherché dans le manpage de rsync une option (l'option r ?) mais je ne suis pas sûr de moi. Sinon, il y a peut être la solution d’enchaîner les commandes rsync mais ça me semble très lourd à gérer (un rsync pour le dossier svg_dossier2, puis un autre pour le dossier svg_dossier1, puis... une idée ? et surtout une solution en gardant la simplicité de passer par un seul rsync et un fichier txt pour le include-from ? merci d'avance jlbn 0 Citer
Fenrir Posté(e) le 31 juillet 2016 Posté(e) le 31 juillet 2016 Le 7/29/2016 à 2:35 PM, jlbn a dit : une idée ? Développer Je n'ai pas sortie la pelleteuse pour lire les messages précédents (ni ton script), mais comme les autres paramètres sont probablement les mêmes, une boucle sur la liste des dossiers autour de la commande devrait faire l'affaire. #!/bin/bash folders=( "svg_dossier2" "svg_dossier1" "commun" "backup" "web" ) for folder in "${folders[@]}" do echo "Traitement du dossier : $folder" #ici ta commande rsync #rsync -a /volume1/$folder /volume2/ done Pour tester, tu peux utiliser --dry-run, ça simule l'exécution sans rien faire 0 Citer
jlbn Posté(e) le 5 août 2016 Auteur Posté(e) le 5 août 2016 (modifié) merci je teste et fait un retour sinon, j'abuse un peu mais la liste des fichiers j'aimerais aller la chercher dans un fichier txt au lieu de l'inscrire en dur dans le script. (même si ça ne change pas grand chose c'est vrai) Modifié le 5 août 2016 par jlbn 0 Citer
Fenrir Posté(e) le 5 août 2016 Posté(e) le 5 août 2016 #!/bin/bash file=`cat /tmp/liste` for line in $file do echo $line done 0 Citer
jlbn Posté(e) le 5 août 2016 Auteur Posté(e) le 5 août 2016 bon après test, le bout de code de Fenrir ne semble pas fonctionner avec les noms de dossier comportant des espaces, mais il m'avait mis sur la voie, j'ai donc utilisé : while read line; do echo "TRAITEMENT DU DOSSIER : $line" >> $LOG/0000-dryrun.log #Lancement de la sauvegarde rsync -av --dry-run --stats --progress --human-readable --force --partial --partial-dir=$PARTDIR --delete --backup \ -e "ssh -p $PORT -i $RSA" \ --backup-dir=$BACKUP/$date/ \ --exclude-from=$EXCLURE \ ""$SOURCE""$line"/" ""$SERVEUR":"$DEST"/"$line"" >> $LOG/0000-dryrun.log 2>$LOG/0000-dryrun-erreur.log done < $INCLURE avec la variable inclure contenant la liste des dossiers. mais là encore des soucis avec des dossiers comportant des espaces et la liste d'eclusion ne fonctionne plus (et je ne vois pas pourquoi) j'abandonne pour le moment, merci à Fenrir jlbn 0 Citer
jlbn Posté(e) le 6 août 2016 Auteur Posté(e) le 6 août 2016 (modifié) re, bon finalement, après quelques essais ça fonctionne, il y avait plusieurs erreurs de ma part : sur le fichier d'exlusion, il faut entourer le caractère # avec [#], sinon la ligne est interprétée comme un commentaire sur le fichier permettant de sélectionner les dossiers à sauvegarder dans l'ordre voulu, il faut une dernière ligne à vide sinon le dernier dossier n'est pas pris en compte (manque un retour chariot) je remet pour ceux que ça intéresse le script complet. donc le script complet : #!/bin/sh PATH=/bin:/usr/bin:/usr/syno/bin ############################################################################################################### # Script de Sauvegarde Rsync # ############################################################################################################### # Version initiale : 05/03/2014 V.1.00 # # Version modifiée : 18/08/2014 V.1.10 Ajout de stat en début de log avec un dryrun # # 06/08/2016 V.1.20 Ajout d'une boucle permettant de traiter les dossiers dans un ordre # # précis à l'aide de la variable INCLURE et d'une boucle while read # # recodage avec egrep pour stats dans le mail # ############################################################################################################### # Réalisé par jlbn - Utilisation du script perl de CoolRaoul pour l'envoi de mail # ############################################################################################################### # Reste à réaliser : # # - en option, vérifier si le serveur cible est allumé # # - en option, allumer le serveur distant le cas échéant au début du script et l'éteindre à la fin # # # ############################################################################################################### #DECLARATION DES VARIABLES date=`date +%y_%m_%d` #Définition du dossier daté du jour LOG=/volume1/Backup/rsync/log #Dossier des fichiers log SIMUL=/volume1/web/simulation.txt #emplacement du fichier simulation permettant de modifier le mode via une page web EXCLURE=/volume1/Backup/rsync/exclure.txt #Fichier texte des éléments à exclure INCLURE=/volume1/Backup/rsync/inclure.txt #Fichier texte des éléments à inclure pas utilise pour le moment SOURCE=/volume1/ #contenu source à sauvegarder DEST=/volume1/backup/xxx/ #emplacement de destination des sauvegardes BACKUP=/volume1/backup/fichiers_suppr #Emplacement sur le serveur cible des dossiers journaliers comprenant les fichiers supprimés sur la source PARTDIR=/volume1/backup/rsync_partial #Emplacement des fichiers partiels en cours de transfert SERVEUR=root@999.999.999.999 SIMULATION=$(head -1 $SIMUL) #Fixé la valeur à 1 pour une simulation sinon 0, la valeur est définie à partir du fichier défini par la variable simul PORT=22 #Spécifie le numéro de port ssh, en local utiliser le port 22 RETENTION=10 #Nb des x derniers dossiers conservés dans le dossier BACKUP du serveur cible RETENTION2=30 #Nb des x derniers fichiers conservés dans le dossier LOG du serveur source RSA=/xxx/.ssh/id_dsa #Ficher de la clé ssh SMTP=smtp.xxx.xxx.xxx #Serveur smtp pour l'envoi de mail via un smtp sans authentification sfr = smtp.sfr.fr ovh = smtp.dsl.ovh.net orange = smtp.orange.fr ADRMAIL=votre.Adresse@mail.com #Mail d'envoi et reception SENDMAIL=/usr/local/bin/my_sendmail #Chemin complet du script perl d'envoi des mail - Utilisation du script perl de CoolRaoul SUJET="DiskStation - Synology DiskStation" #Sujet des mails envoyés NBMAX=10000 #nb maxi de fichiers supprimés par sécurité, utilisé avec le paramètre rsync --max-delete=NUM #FIN DE LA DECLARATION DES VARIABLES ET DE LA CONFIGURATION, NE PAS MODIFIER PLUS BAS #****************************************************************************************************************** if [ ${SIMULATION} -eq 1 ] then #Ecriture dans le log de la date et heure de lancement DEBUT="Lancement de la sauvegarde $(date +%A) $(date +%d) $(date +%B) $(date +%Y) à $(date +%H)h et $(date +%M)min" echo "===========================================================================" > $LOG/0000-dryrun.log echo "$DEBUT" >> $LOG/0000-dryrun.log echo "===========================================================================" >> $LOG/0000-dryrun.log echo "" >> $LOG/0000-dryrun.log #Lancement de la sauvegarde rsync -av --dry-run --stats --human-readable --force --partial --partial-dir=$PARTDIR --delete-excluded --max-delete=$NBMAX --backup \ -e "ssh -p $PORT -i $RSA" \ --backup-dir=$BACKUP/$date/ \ --exclude-from=$EXCLURE \ $SOURCE $SERVEUR:$DEST >> $LOG/0000-dryrun.log 2>$LOG/0000-dryrun-erreur.log #Code de la sauvegarde STATUT=$? #Ecriture de la date et de l'heure de fin de la sauvegarde FIN="Fin de la sauvegarde $(date +%A) $(date +%d) $(date +%B) $(date +%Y) à $(date +%H)h et $(date +%M)min" echo "" >>$LOG/0000-dryrun.log echo "===========================================================================" >> $LOG/0000-dryrun.log echo "$FIN" >> $LOG/0000-dryrun.log echo "===========================================================================" >> $LOG/0000-dryrun.log #Gestion du fichier d'erreur if [ $STATUT -eq 0 ] || [ $STATUT -eq 20 ]; then rm $LOG/0000-dryrun-erreur.log fi elif [ ${SIMULATION} -eq 0 ] then #Ecriture dans le log de la date et heure de lancement DEBUT="Lancement de la sauvegarde $(date +%A) $(date +%d) $(date +%B) $(date +%Y) à $(date +%H)h et $(date +%M)min" echo "" > $LOG/$date.log echo "===========================================================================" >> $LOG/$date.log echo "$DEBUT" >> $LOG/$date.log echo "===========================================================================" >> $LOG/$date.log echo "" >> $LOG/$date.log #Stock dans une variable les premières lignes du log pour réutilisation dans le mail STATLOG1=$(cat "$LOG/$date.log") #lance un dry run pour stats de sauvegarde rsync -av --dry-run --stats --human-readable --force --partial --partial-dir=$PARTDIR --delete-excluded --max-delete=$NBMAX --backup \ -e "ssh -p $PORT -i $RSA" \ --backup-dir=$BACKUP/$date/ \ --exclude-from=$EXCLURE \ $SOURCE $SERVEUR:$DEST > $LOG/0000-dryrun.log 2>$LOG/$date-erreur.log #Récupérer les statistiques du dryrun grep ^"Number of files:" "$LOG/0000-dryrun.log" >> $LOG/$date.log grep ^"Total file size:" "$LOG/0000-dryrun.log" >> $LOG/$date.log grep ^"Number of files transferred:" "$LOG/0000-dryrun.log" >> $LOG/$date.log grep ^"Total transferred file size:" "$LOG/0000-dryrun.log" >> $LOG/$date.log echo "" >> $LOG/$date.log while read line; do echo "======Sauvegarde=======" >> $LOG/$date.log echo "TRAITEMENT DU DOSSIER : $line" >> $LOG/$date.log echo "======Statistiques=======" >> $LOG/$date.log #Lancement de la sauvegarde rsync -av --stats --progress --human-readable --force --partial --partial-dir=$PARTDIR --delete-excluded --max-delete=$NBMAX --backup --protect-args \ -e "ssh -p $PORT -i $RSA" \ --backup-dir=$BACKUP/$date/ \ --exclude-from=${EXCLURE} \ "${SOURCE}${line}"/ ${SERVEUR}:"${DEST}/${line}" >> $LOG/$date.log 2>$LOG/$date-erreur.log echo "======fin de sauvegarde du dossier $line=======" >> $LOG/$date-erreur.log done < ${INCLURE} #Suppression dans le fichier de log des "progress" intermédiaires perl -0pe 's/[\r]/\n/g' < $LOG/$date.log > $LOG/$date-2.log #remplace les sauts CR en LF grep -v "%)$" $LOG/$date-2.log > $LOG/$date.log #supprime les "progress" intermédiaires rm $LOG/$date-2.log #supprime le fichier temporaire crée #Code de la sauvegarde STATUT=$? #Ecriture de la date et de l'heure de fin de la sauvegarde FIN="Fin de la sauvegarde $(date +%A) $(date +%d) $(date +%B) $(date +%Y) à $(date +%H)h et $(date +%M)min" echo "" >>$LOG/$date.log echo "===========================================================================" >> $LOG/$date.log echo "$FIN" >> $LOG/$date.log echo "===========================================================================" >> $LOG/$date.log #Stock dans une variable les statistiques du log pour réutilisation dans le mail echo "======Statistiques globales======" > $LOG/stat.log egrep "^======Sauvegarde=======|^TRAITEMENT DU DOSSIER|^======Statistiques=======|^Number of files:|^Number of files transferred:|^Total file size:|^Total transferred file size:|^======fin de sauvegarde=======" \ "$LOG/$date.log" >> $LOG/stat.log echo "" >> $LOG/stat.log STATLOG2=$(cat "$LOG/stat.log") #Stock dans une variable les dernières lignes du log pour réutilisation dans le mail echo "" > $LOG/stat.log tail -n 3 $LOG/$date.log >> $LOG/stat.log STATLOG3=$(cat "$LOG/stat.log") #Stock dans une variable la liste des fichiers supprimés dans la cible echo "" > $LOG/fichiersuppr.log echo "Liste des fichiers presents dans le dossier $date :" >> $LOG/fichiersuppr.log echo " -------------------------- " >> $LOG/fichiersuppr.log grep '^deleting ' $LOG/$date.log | sed s/^"deleting "//gw >> $LOG/fichiersuppr.log LISTESUPPR=$(cat $LOG/fichiersuppr.log) #Gestion du fichier d'erreur et envoi du mail en fonction du code statut de la sauvegarde if [ $STATUT -eq 0 ] then echo "La sauvegarde a reussi - Code statut = $STATUT $STATLOG1 $STATLOG2 $STATLOG3 $LISTESUPPR" | $SENDMAIL -s "$SUJET" \ -f "$ADRMAIL" -m $SMTP $ADRMAIL rm $LOG/$date-erreur.log elif [ $STATUT -eq 20 ] then echo "La sauvegarde a ete stoppee par le planificateur ou manuellement - Code statut = $STATUT $STATLOG1 $STATLOG2 $STATLOG3 $LISTESUPPR" | $SENDMAIL -s "$SUJET" \ -f "$ADRMAIL" -m $SMTP $ADRMAIL rm $LOG/$date-erreur.log else echo "La sauvegarde a echoue - Code statut = $STATUT $STATLOG1 $STATLOG2 $STATLOG3 $LISTESUPPR" | $SENDMAIL -s "$SUJET" \ -f "$ADRMAIL" -m $SMTP $ADRMAIL "$LOG/$date-erreur.log" fi #Supprime les logs devenus inutiles rm $LOG/fichiersuppr.log rm $LOG/stat*.log rm $LOG/*dryrun*.log #On conserve les x derniers dossiers du repertoire BACKUP en fonction de la valeur de RETENTION NBREP=$(ssh -p $PORT -i $RSA $SERVEUR "ls -1d $BACKUP/* | wc -l") let CRIT1=$NBREP-$RETENTION if [ $CRIT1 -le 0 ] then break; else let NBLISTE=$NBREP-$RETENTION ssh -p $PORT -i $RSA $SERVEUR "ls -1d $BACKUP/* | head -n $NBLISTE | xargs rm -r" fi #On conserve les x derniers fichiers du repertoire LOG en fonction de la valeur de RETENTION2 NBREP2=$(ls -1 $LOG/* | wc -l) let CRIT2=$NBREP2-$RETENTION2 if [ $CRIT2 -le 0 ] then break; else let NBLISTE2=$NBREP2-$RETENTION2 ls -1 $LOG/* | head -n $NBLISTE2 | xargs rm -r fi fi exit bonne journée Modifié le 7 août 2016 par jlbn modification suite aux conseils de Fenrir 0 Citer
Fenrir Posté(e) le 6 août 2016 Posté(e) le 6 août 2016 Le 8/6/2016 à 1:06 PM, jlbn a dit : sur les noms de dossiers avec espace, j'ai ajouté "?" : nom?du?dossier?avec?espace et ça passe Développer attention avec le ?, c'est un joker => document?perso=document perso/document_perso/document-perso/documentsperso/... Pour ton script, quelques suggestions : pour les logs : mets la date dans le nom du fichier, ça permet d'avoir un historique des actions et une rotation des fichiers rajoute un # (voir plusieurs) devant tes commentaires pour bien différencier les étapes dans le fichier s'ils sont gros, compresse les avant de les envoyer par mail rsync, tu as quelques options qui pourraient d’intéresser : --delete-excluded : si tu as sauvegardé un dossier, mais que tu n'en veux plus --delete-before (suppression avant la copie, utile dans le cas où la place est limitée) ou --delete-delay (plus sécurisant) --contimeout : ça te permet de gérer la disponibilité de la destination --compress, utile en cas de débit faible, à utiliser --skip-compress (pas la peine de compresser les mp3 par exemple) --max-delete : c'est une sécurité que je rajoute souvent, pour éviter de vider la destination en cas d'erreur ou d'opération de rangement/nettoyage de la source --protect-args pour gérer les caractères spéciaux (espace par exemple) --verbose, --stats, --progress, --human-readable ... ça ralenti beaucoup la vitesse (ça bouffe du cpu), surtout si c'est pour les virer des logs après (ce qui bouffe aussi du cpu et de l'io) syntaxe : dans tes test, "=" c'est pour une affectation, pas une comparaison (parfois ça marche, parfois non), utilise plutôt "-eq" ou "==" tu peux chainer les test : if [ $STATUT -eq 0 ] || [ $STATUT -eq 20 ]; then 0 Citer
jlbn Posté(e) le 6 août 2016 Auteur Posté(e) le 6 août 2016 merci pour ces conseils, j'avais compris pour le caractère ?, mais j'ai essayé avec nom\ du dossier\ avec\ espace et ça n'a pas fonctionné. une autre question, au début du scipt j'ai mis : #!/bin/sh PATH=/bin:/usr/bin:/usr/syno/bin quelle est la différence avec : #!/bin/bash ? jlbn 0 Citer
Fenrir Posté(e) le 6 août 2016 Posté(e) le 6 août 2016 Le 8/6/2016 à 2:15 PM, jlbn a dit : quelle est la différence avec : #!/bin/bash ? Développer Le shebang indique quel programme utiliser pour lancer la suite. 0 Citer
jlbn Posté(e) le 6 août 2016 Auteur Posté(e) le 6 août 2016 à priori, le traitement correct des espaces avec le "\" fonctionne en bash mais pas en sh. or, j'ai tout écrit en sh, comment je fait pour transformer le script en bash et le lancer dans le planificateur ?. Par ailleurs, le script fonctionnera-t-il pour tout le reste ? merci jlbn 0 Citer
Fenrir Posté(e) le 6 août 2016 Posté(e) le 6 août 2016 sh et bash sont très proche niveau syntaxe, pour tester, il suffit de changer le shebang. Mais si c'est juste pour échapper les espaces, ça ne vaut pas le coup. Tu as d'autres manière de le faire, les simple quote (') par exemple si tu utilises --protect-args Par contre, si tes espaces sont juste dans --exclude-from, tu ne devrais rien avoir à échapper Donc question : ton soucis c'est avec ${INCLURE} ou ${EXCLURE} ? => si c'est ${INCLURE} : utilises --protect-args si c'est ${EXCLURE} : rien à échapper si c'est ${INCLURE} et ${EXCLURE} : utilises --protect-args avec des quotes dans la commande et n'échappe rien dans le fichier 0 Citer
jlbn Posté(e) le 6 août 2016 Auteur Posté(e) le 6 août 2016 Le 8/6/2016 à 3:32 PM, Fenrir a dit : Donc question : ton soucis c'est avec ${INCLURE} ou ${EXCLURE} ? Développer je dois être un boulet, mais ça ne fonctionne pas et pour répondre à la question, c'est bien le INCLURE qui pose problème : le contenu du fichier lié à la variable ${INCLURE} : Commun famille svg_dossier1 le contenu du fichier lié à la variable ${EXCLURE} : aquota.* *~ *Thumbs.db *Autorun.inf .DS_Store @*/ @* [#]*/ [#]* .sync/ la partie du script traitant la sauvegarde : while read line; do echo "======Sauvegarde=======" >> $LOG/0000-dryrun.log echo "TRAITEMENT DU DOSSIER : $line" >> $LOG/0000-dryrun.log echo "======Statistiques=======" >> $LOG/0000-dryrun.log #Lancement de la sauvegarde rsync -av --dry-run --stats --progress --human-readable --force --partial --partial-dir=$PARTDIR --delete-excluded --max-delete=$NBMAX --backup --protect-args \ -e "ssh -p $PORT -i $RSA" \ --backup-dir=$BACKUP/$date/ \ --exclude-from=${EXCLURE} \ ${SOURCE}${line}/ ${SERVEUR}:${DEST}/${line} >> $LOG/0000-dryrun.log 2>$LOG/0000-dryrun-erreur.log echo "======fin de sauvegarde du dossier $line=======" >> $LOG/0000-dryrun.log done < ${INCLURE} le dossier commun famille n'est toujours pas traité. jlbn 0 Citer
Fenrir Posté(e) le 6 août 2016 Posté(e) le 6 août 2016 Le 8/6/2016 à 3:32 PM, Fenrir a dit : utilises --protect-args avec des quotes dans la commande Développer il manque les quotes "${SOURCE}${line}/" ${SERVEUR}:"${DEST}/${line}" 0 Citer
jlbn Posté(e) le 6 août 2016 Auteur Posté(e) le 6 août 2016 Le 8/6/2016 à 5:36 PM, Fenrir a dit : il manque les quotes "${SOURCE}${line}/" ${SERVEUR}:"${DEST}/${line}" Développer effectivement ça fonctionne, j'ai un peu de mal sur l'uutilisation ou non des quote. Merci encore jlbn 0 Citer
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.