Avis sur script rsync
Fermé
tom45
-
Modifié le 9 déc. 2021 à 17:14
mamiemando Messages postés 33344 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 novembre 2024 - 13 déc. 2021 à 16:57
mamiemando Messages postés 33344 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 novembre 2024 - 13 déc. 2021 à 16:57
A voir également:
- Avis sur script rsync
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Script bat - Guide
- Microsoft activation script - Accueil - Windows
- Executeur de script - Télécharger - Édition & Programmation
4 réponses
mamiemando
Messages postés
33344
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
7 novembre 2024
7 803
Modifié le 9 déc. 2021 à 17:32
Modifié le 9 déc. 2021 à 17:32
Bonjour,
À première vue, le script semble correct, mais il est améliorable :
Voici à quoi ça pourrait ressembler
Bonne chance
À première vue, le script semble correct, mais il est améliorable :
- Je te recommande de choisir des noms de points de montage un peu plus parlants et un peu plus jolis.
- D'après
man rsync
et cette discussion, tu n'as pas besoin de monter explicitement les deux partages distants s'ils sont accessibles enssh
. Mais comme tes partages sont accédés via samba, tu dois effectivement les monter. - Évite aussi les caractères accentués, et vérifie que les points de montage existent (en les créant si nécessaire avec
mkdir -p
). Le chemin vers les credentials windows est bizarre. - À toi de voir si tu veux monter / démonter les volumes distants à chaque fois. Tu peux aussi choisir de les monter / démonter au démarrage et à l'extinction de ton ordinateur en les référençant dans
/etc/fstab
. - Au niveau des logs, le plus simple est de rediriger la sortie d'erreur dans un fichier de ton choix. Derrière chaque commande, il suffit d'ajouter
&2 >> /var/log/toto.log
. Une version plus évoluée consiste à écrire une petite fonction qui insère en début de ligne de log la date actuelle (voir la fonctionlog_pipe
dans cette discussion).
Voici à quoi ça pourrait ressembler
#!/bin/sh URL_NETAPP="\\\\ipnetapp/repertoire" MNT_NETAPP="/mnt/netapp " CRED_NETAPP="/root/.cifs.credential" URL_WINDOWS="//ipwindows/dossier_a_recuperer" MNT_WINDOWS="/mnt/windows/" CRED_WINDOWS="/mnt/credentials" # Bizarre LOG_FILE="/var/log/toto.log" log_pipe(){ while read line; do echo [$(date +%Y-%m-%d\ %H:%M:%S)] "$line" >> "$LOG_FILE" done } mkdir -p "$MNT_WINDOWS" "$MNT_NETAPP" mount -t cifs "$URL_WINDOWS" "$MNT_WINDOWS" -o credentials="$CRED_WINDOWS" 2>&1 | log_pipe mount -t cifs "$URL_NETAPP" "$MNT_NETAPP" -o credentials="$CRED_NETAPP" 2>&1 | log_pipe rsync -avz "$MNT_WINDOWS" "$MNT_NETAPP" 2>&1 | log_pipe umount "$MNT_WINDOWS" umount "$MNT_NETAPP"
Bonne chance
Merci pour tes réponses très clair et instructives
Je te recommande de choisir des noms de points de montage un peu plus parlants et un peu plus jolis.
oui c'était pour modifier les noms mais j'ai des noms plus propres dans mon scripts
D'après man rsync et cette discussion, tu n'as pas besoin de monter explicitement les deux partages distants s'ils sont accessibles en ssh. Mais comme tes partages sont accédés via samba, tu dois effectivement les monter.
intéressant je vais regarder de ce coté là je suis justement en train de configurer open ssh sur les postes windows
Évite aussi les caractères accentués, et vérifie que les points de montage existent (en les créant si nécessaire avec mkdir -p).
Le chemin vers les credentials windows est bizarre.
je l'ai changé et mis dans un dossier caché
À toi de voir si tu veux monter / démonter les volumes distants à chaque fois. Tu peux aussi choisir de les monter / démonter au démarrage et à l'extinction de ton ordinateur en les référençant dans /etc/fstab.
Monter / démonter dans mon ca je préfère car je suis sur un serveur linux plus propre
Au niveau des logs, le plus simple est de rediriger la sortie d'erreur dans un fichier de ton choix. Derrière chaque commande, il suffit d'ajouter &2 >> /var/log/toto.log. Une version plus évoluée consiste à écrire une petite fonction qui insère en début de ligne de log la date actuelle (voir la fonction log_pipe dans cette discussion).
Je n'ai pas mis les chemins en variable car potentiellement je vais avoir 6 ou 7 pc à sauvegarder dans le même script, j'ai fait une ligne pour chacun avec ce qui change à chaque fois .
Voila ce que donne mon code :
J'ai ajouté un test pour qu'il n'y ai pas de doublon, si le répertoire est présent c'est que le test n'est pas fini du coup je ne lance pas le script si c'est déjà en cours . Je ne sait pas si il existe une façon plus propre ?
Je te recommande de choisir des noms de points de montage un peu plus parlants et un peu plus jolis.
oui c'était pour modifier les noms mais j'ai des noms plus propres dans mon scripts
D'après man rsync et cette discussion, tu n'as pas besoin de monter explicitement les deux partages distants s'ils sont accessibles en ssh. Mais comme tes partages sont accédés via samba, tu dois effectivement les monter.
intéressant je vais regarder de ce coté là je suis justement en train de configurer open ssh sur les postes windows
Évite aussi les caractères accentués, et vérifie que les points de montage existent (en les créant si nécessaire avec mkdir -p).
Le chemin vers les credentials windows est bizarre.
je l'ai changé et mis dans un dossier caché
À toi de voir si tu veux monter / démonter les volumes distants à chaque fois. Tu peux aussi choisir de les monter / démonter au démarrage et à l'extinction de ton ordinateur en les référençant dans /etc/fstab.
Monter / démonter dans mon ca je préfère car je suis sur un serveur linux plus propre
Au niveau des logs, le plus simple est de rediriger la sortie d'erreur dans un fichier de ton choix. Derrière chaque commande, il suffit d'ajouter &2 >> /var/log/toto.log. Une version plus évoluée consiste à écrire une petite fonction qui insère en début de ligne de log la date actuelle (voir la fonction log_pipe dans cette discussion).
Je n'ai pas mis les chemins en variable car potentiellement je vais avoir 6 ou 7 pc à sauvegarder dans le même script, j'ai fait une ligne pour chacun avec ce qui change à chaque fois .
Voila ce que donne mon code :
J'ai ajouté un test pour qu'il n'y ai pas de doublon, si le répertoire est présent c'est que le test n'est pas fini du coup je ne lance pas le script si c'est déjà en cours . Je ne sait pas si il existe une façon plus propre ?
#!/bin/bash ##Script de Sauvegarde des data des 5 PC ##Ne pas modifier le script #fichier de log LOG_FILE="/var/log/5PC.log" log_pipe(){ while read line; do echo [$(date +%Y-%m-%d\ %H:%M:%S)] "$line" >> "$LOG_FILE" done } #Fonction d'erreur si une erreur il affichera un message d'erreur sous /var/log/messages function error() { logger "${LOG} -> ${1}" exit 1 } #Test si le script n'est pas déja en cours if [ -e /root/5PC/testduscript.txt ] then echo "Mon fichier existe" exit else echo "Mon fichier n'existe pas" cat /root/5PC/testduscript.txt fi ##-------------------------------------------------------------------------------------------------------------- ##Pc1 #Fonction de sauvegarde des données du PC1 # L'option -p evite les erreurs si le répertoire est déjà présent. mkdir -p /mnt/Montagewindowspc1 || error "Impossible de crée le répertoire '/mnt/Montagewindowspc1'" mkdir -p /mnt/netappc1 || error "Impossible de crée le répertoire '/mnt/netappc1'" mount -t cifs //ippc1/Reports /mnt/Montagewindowspc1 -o credentials=/root/5PC/.credentials 2>&1 | log_pipe mount -t cifs \\\\ipnetap/chemin /mnt/netappc1 -o credentials=/root/.cifs.credential 2>&1 | log_pipe rsync -avz /mnt/Montagewindowspc1 /mnt/netappc1 2>&1 | log_pipe umount /mnt/Montagewindowspc1 umount /mnt/netappc1 ##-------------------------------------------------------------------------------------------------------------- ##PC2/ #Fonction de sauvegarde des données pc 2 # L'option -p evite les erreurs si le répertoire est déjà présent. mkdir -p /mnt/Montagewindowspc2 || error "Impossible de crée le répertoire '/mnt/Montagewindowspc2'" mkdir -p /mnt/netappc2 || error "Impossible de crée le répertoire '/mnt/netappc2'" mount -t cifs //ippc1/Reports /mnt/Montagewindowspc2 -o credentials=/root/5PC/.credentials 2>&1 | log_pipe mount -t cifs \\\\ipnetap/chemin /mnt/netappc2 -o credentials=/root/.cifs.credential 2>&1 | log_pipe rsync -avz /mnt/Montagewindowspc2 /mnt/netappc2 2>&1 | log_pipe umount /mnt/Montagewindowspc2 umount /mnt/netappc2 ##-------------------------------------------------------------------------------------------------------------- ##Pc3 #Fonction de sauvegarde des données du PC3 ##-------------------------------------------------------------------------------------------------------------- #Supression du fichier de test rm /root/5PC/testduscript.txt
j'ai une autre question, peut être un peu bête comme question désolé.
si je fait un mount sur le mon pc linux qui ne sert que de passerelle entre le windows et mon netapp est-ce que cela va prendre de l'espace disque sur le pc linux ?
j'ai 25 go par ordinateur :o
si je fait un mount sur le mon pc linux qui ne sert que de passerelle entre le windows et mon netapp est-ce que cela va prendre de l'espace disque sur le pc linux ?
j'ai 25 go par ordinateur :o
mamiemando
Messages postés
33344
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
7 novembre 2024
7 803
11 déc. 2021 à 14:39
11 déc. 2021 à 14:39
Non, c'est "en mémoire". En réalité linux t'expose une arborescence de fichiers qui permet de ne plus se soucier du périphérique, du partage réseau et du système de fichiers sous-jacent. Il y a même des fichiers qui n'ont aucune existence physique sur le disque dur (typiquement
/procpermet d'interroger le noyau linux) et il en va de même pour les partages réseaux.
ouf ça me sauve la vie car je n'ai que 70 go sur mon linux . merci pour l'info .
Avez-vous vu mon code au dessu ? pensez vous qu'il est clean ? je l'ai testé il fonctionne mais c'est plus un avis clean/amélioration qu'il me faudrait svp
Avez-vous vu mon code au dessu ? pensez vous qu'il est clean ? je l'ai testé il fonctionne mais c'est plus un avis clean/amélioration qu'il me faudrait svp
mamiemando
Messages postés
33344
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
7 novembre 2024
7 803
13 déc. 2021 à 16:57
13 déc. 2021 à 16:57
Ouf ça me sauve la vie car je n'ai que 70 go sur mon linux.
Oui, pour clarifier ma réponse, sous linux, il faut voir l'arborescence des fichiers exposés comme une sorte d'API pour accéder à différentes sources de données (noyau, disques, devices, sockets ...). Ce qui signifie que la présence d'un fichier dans l'arborescence n'a pas d'implication sur le stockage. Ce sont les
pensez vous qu'il est clean ?
... Généralement on crée plutôt un fichier vide dans
Bonne chance
Oui, pour clarifier ma réponse, sous linux, il faut voir l'arborescence des fichiers exposés comme une sorte d'API pour accéder à différentes sources de données (noyau, disques, devices, sockets ...). Ce qui signifie que la présence d'un fichier dans l'arborescence n'a pas d'implication sur le stockage. Ce sont les
mountqui détermine où est stocké physiquement un fichier (quand il en a une, ce qui exclue par exemple la plupart des fichiers dans
/proc).
pensez vous qu'il est clean ?
- Ça dépend. Par exemple la fonction
error
utilise la commandelogger
ce qui signifie que le fichier de log sera/var/log/syslog
. Est-ce que tu veux faire, je ne sais pas, mais ça n'est pas cohérent avec la fonctionlog_pipe
. Il serait plus logique que ton script n'écrire que dans un fichier de log (qui à adapterlog_pipe
pour utiliserlogger
à la place d'echo
). - Je recommande d'écrire les messages d'erreur plutôt en anglais.
- En terme de propreté de code, les points de montages et adresses mises en jeu devrait être stockées dans des variables, ce qui permettra de corriger plus facilement le script si elles viennent à changer.
- Si j'ai bien compris le passage qui suit, tu veux garantir qu'au plus une instance de ton script à un moment donné.
#Test si le script n'est pas déja en cours if [ -e /root/5PC/testduscript.txt ] then echo "Mon fichier existe" exit else echo "Mon fichier n'existe pas" cat /root/5PC/testduscript.txt fi
... Généralement on crée plutôt un fichier vide dans
/var/lockpour être conforme à la FHS. Comme expliqué dans cette discussion, tu peux utiliser
flock.
Bonne chance