IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script de sauvegarde que je souhaite faire évoluer


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Script de sauvegarde que je souhaite faire évoluer
    Bonjour à Toutes et Tous

    J'ai un script en bash, pour mes sauvegardes, que je souhaite faire évoluer, si cela est possible, et "facile" pour moi...

    le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #!/bin/bash
    #
    # Ce script permet de faire une sauvegarde incrémentale manuelle avec "rsync"
    #
    # Variables de couleurs
    VERT="\\033[1;32m"
    STNDT="\\033[0;39m"
    ROUGE="\\033[1;31m"
    ROSE="\\033[1;35m"
    BLEU="\\033[1;34m"
    BLANC="\\033[0;02m"
    BLANCLAIR="\\033[1;08m"
    JAUNE="\\033[1;33m"
    CYAN="\\033[1;36m"
     
    Date=$(date +%d-%m-%Y)
    Heure=$(date +%T)
    echo -e $BLEU "Exécuter la sauvegarde SovTotale-1 ? [o/N]"; # Pour plus de lisibilité, la réponse par défaut est donnée en majuscule à la suite de la question.
    read -sn1;                                      # Pas la peine d'entrer plus d'un caractère ni d'appuyer sur la touche entrée.
    if [[ $REPLY =~ [yYoO] ]] ||                    # La variable REPLY est automatiquement créée par la fonction read du bash (builtins)
       { echo -e $ROUGE "==============================================\n Abandon sauvegarde à  : $Heure le $Date\n ==============================================";
    	 echo -e $STNDT "Sortie Sauvegarde SovTotale-1"; exit; } 
    #
    then
        echo -e $VERT "===============================================\n Lancement sauvegarde SovTotale-1 à : $Heure le $Date\n ==============================================="
     
    # pour donner un nom "raccourci" (incluant le chemin) au fichier backuperror.log :
    backup=/home/user/bin/Sauvegardes/backuperrorSovTotale-1-a.log
     
    # à 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.
     
    #SSD32Go
    	echo -e $ROUGE "============================================\n      Synchronisation en cours sur SSD32Go\n ============================================"
    rsync --archive --partial --progress --delete-during --stats /home/user/.thunderbird /media/user/SSD32Go/ 2>> $backup
     
    #DD1To
    	echo -e $ROSE "============================================\n      Synchronisation en cours sur DD1To\n ============================================"
    rsync --archive --partial --progress --delete-during --stats /home /media/user/Sauv1To-a/SauvDdPrincipal1/ 2>> $backup
     
    #SSHD500-1
    	echo -e $VERT "==============================================\n     Synchronisation en cours sur SSHD500-1\n =============================================="
    rsync --archive --partial --progress --delete-during --stats --exclude="/media" --exclude="/proc" --exclude="/sys" / /media/user/SSHD500-1/ 2>> $backup
     
    # Vérification des liens = faite
    # 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
    		# Mise à jour de l'heure
    		Heure=$(date +%T)
    	echo -e $VERT "===============================================\n Sauvegarde SovTotale-1 terminée à  : $Heure le $Date\n ==============================================="
    else
    	echo -e $ROUGE "==============================================\n Procédure Sauvegarde SovTotale-1 interrompue par l'utilisateur à  : $Heure le $Date\n =============================================="
    fi
    	echo -e $STNDT
    # ---- fin du script ----
    J'y ai laissé les commentaires, puisque je suis loin d'être un pratiquant assidu... :o

    Quels sont les soucis avec ce script ?
    + premier souci, dans le cas où, je déconnecte un support de sauvegarde, rien dans le script, ne m'avertit qu'il est manquant... mais le plus "gênant" c'est qu'il sauvegarde tout de même, sur le support principal, et le sature... (

    + second souci, si j'indique un autre fichier, que backuperrorSovTotale-1-a.log, rien ne s'inscrit dedans... pour quelle raison... ???
    celui que j'ai tenté de créer, en l'ouvrant, il m'est indiqué : "le document n'était pas en UTF-8 valide" , là aussi, cela m'est incompréhensible...

    mais à force de contourner les "blocages" comme ceux là, je suppose qu'un jour ou l'autre, ça se bloquera vraiment... :o

    Merci de votre aide
    Dernière modification par LittleWhite ; 18/04/2018 à 11h13. Motif: Titre précis

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 299
    Par défaut
    Bonjour

    + second souci, si j'indique un autre fichier, que backuperrorSovTotale-1-a.log, rien ne s'inscrit dedans... pour quelle raison... ???
    Comme tu ne protèges jamais $backup par des double quotes, ( "$backup" ), n'aurais-tu pas mis un espace dans ton nouveau nom de fichier ?
    Il a écrit, mais pas dans le nom de fichier attendu.

  3. #3
    Invité
    Invité(e)
    Par défaut


    Comment ça jamais... ayé, j'ai vu où... et je corrige

    le nom du fichier était :
    backuperrorSovTotale-1.log

    je l'ai gardé, car je souhaitais l'exploiter "plus tard"...

    Tu indiques qu'il faut protéger $backup par des doubles croches, comme ceci :

    "$backup"=/home/user/bin/Sauvegardes/backuperrorSovTotale-1-a.log
    ?

    Merci de ton aide
    Dernière modification par al1_24 ; 17/04/2018 à 20h00. Motif: Citation superflue

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    il y a une erreur ligne 20 : un echo n'étant jamais faux, la clause else ne sera jamais effectuée.

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 299
    Par défaut
    Tiens. En parlant de la ligne 20 : répondre "non" est interprété comme un "oui".


  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    oui, c'est tout à fait qu'est-ce que je dis.

  7. #7
    Invité
    Invité(e)
    Par défaut
    code rectifié pour $backup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #!/bin/bash
    #
    # Ce script permet de faire une sauvegarde incrémentale manuelle avec "rsync"
    #
    # Variables de couleurs
    VERT="\\033[1;32m"
    STNDT="\\033[0;39m"
    ROUGE="\\033[1;31m"
    ROSE="\\033[1;35m"
    BLEU="\\033[1;34m"
    BLANC="\\033[0;02m"
    BLANCLAIR="\\033[1;08m"
    JAUNE="\\033[1;33m"
    CYAN="\\033[1;36m"
     
    Date=$(date +%d-%m-%Y)
    Heure=$(date +%T)
    echo -e $BLEU "Exécuter la sauvegarde SovTotale-1 ? [o/N]"; # Pour plus de lisibilité, la réponse par défaut est donnée en majuscule à la suite de la question.
    read -sn1;                                      # Pas la peine d'entrer plus d'un caractère ni d'appuyer sur la touche entrée.
    if [[ $REPLY =~ [yYoO] ]] ||                    # La variable REPLY est automatiquement créée par la fonction read du bash (builtins)
       { echo -e $ROUGE "==============================================\n Abandon sauvegarde à  : $Heure le $Date\n ==============================================";
    	 echo -e $STNDT "Sortie Sauvegarde SovTotale-1"; exit; } 
    #
    then
        echo -e $VERT "===============================================\n Lancement sauvegarde SovTotale-1 à : $Heure le $Date\n ==============================================="
     
    # pour donner un nom "raccourci" (incluant le chemin) au fichier backuperror.log :
    backup=/home/user/bin/Sauvegardes/backuperrorSovTotale-1-a.log
     
    # à 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.
     
    #SSD32Go
    	echo -e $ROUGE "============================================\n      Synchronisation en cours sur SSD32Go\n ============================================"
    rsync --archive --partial --progress --delete-during --stats /home/user/.thunderbird /media/user/SSD32Go/ 2>> "$backup"
     
    #DD1To
    	echo -e $ROSE "============================================\n      Synchronisation en cours sur DD1To\n ============================================"
    rsync --archive --partial --progress --delete-during --stats /home /media/user/Sauv1To-a/SauvDdPrincipal1/ 2>> "$backup"
     
    #SSHD500-1
    	echo -e $VERT "==============================================\n     Synchronisation en cours sur SSHD500-1\n =============================================="
    rsync --archive --partial --progress --delete-during --stats --exclude="/media" --exclude="/proc" --exclude="/sys" / /media/user/SSHD500-1/ 2>> "$backup"
     
    # Vérification des liens = faite
    # 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
    		# Mise à jour de l'heure
    		Heure=$(date +%T)
    	echo -e $VERT "===============================================\n Sauvegarde SovTotale-1 terminée à  : $Heure le $Date\n ==============================================="
    else
    	echo -e $ROUGE "==============================================\n Procédure Sauvegarde SovTotale-1 interrompue par l'utilisateur à  : $Heure le $Date\n =============================================="
    fi
    	echo -e $STNDT
    # ---- fin du script ----
    les "$backup" rectifiés sur le script original, sont-ils correctement placés ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Je reprends mon premier commentaire :
    Citation Envoyé par dev871 Voir le message
    ...
    Quels sont les soucis avec ce script ?
    + premier souci, dans le cas où, je déconnecte un support de sauvegarde, rien dans le script, ne m'avertit qu'il est manquant... mais le plus "gênant" c'est qu'il sauvegarde tout de même, sur le support principal, et le sature... (

    + second souci, si j'indique un autre fichier, que backuperrorSovTotale-1-a.log, rien ne s'inscrit dedans... pour quelle raison... ???
    celui que j'ai tenté de créer, en l'ouvrant, il m'est indiqué : "le document n'était pas en UTF-8 valide" , là aussi, cela m'est incompréhensible...

    mais à force de contourner les "blocages" comme ceux là, je suppose qu'un jour ou l'autre, ça se bloquera vraiment... :o

    Merci de votre aide
    ces 2 soucis, sont toujours là...

    de quelle manière "propre" puis-je les supprimer ?

  9. #9
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 408
    Par défaut
    Pour le 1er cas:
    Tes disque dur de sauvegarde sont tous montés (d'après ton script) sur un répertoire qui se trouve dans /media/user/, il faut donc que tu vérifie en amont que ces disques soient bien présents, donc il suffit de vérifier que chaque répertoire de sauvegarde ne soit pas la même source que le répertoire dans lequel il se trouve (ici /media/user) :
    Pour avoir la source d'un répertoire (par exemple celle de /media/user) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df --output=source /media/user | tail -1
    et si cette source est identique à celle de /media/user/SSD32Go/ par exemple, alors c'est que ton disque pour SSD32Go n'est pas monté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[ "`df --output=source /media/user/ | tail -1`" != "`df --output=source /media/user/SSD32Go/ | tail -1`" ]] && echo OK

  10. #10
    Invité
    Invité(e)
    Par défaut


    Vérifier en amont... la ligne qui précède la commande de sauvegarde, c'est bon, où trop "juste"... ?


    Citation Envoyé par disedorgue Voir le message
    ...
    et si cette source est identique à celle de /media/user/SSD32Go/ par exemple, alors c'est que ton disque pour SSD32Go n'est pas monté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[ "`df --output=source /media/user/ | tail -1`" != "`df --output=source /media/user/SSD32Go/ | tail -1`" ]] && echo OK
    Puisque tous mes supports sont montés sous media, ne devrai-je pas plutôt indiquer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[ "`df --output=source /media/user/SSD32Go/ | tail -1`" != "`df --output=source /media/user/SSD32Go/ | tail -1`" ]] && echo OK
    il indique OK en cas de présence, et en cas d'absence ?

    sinon, si j'évite de préciser SSD32Go, et, puisque les autres supports sont montés, la vérification n'indiquera rien en cas d'absence d'un support... !

    j'ai suivi ou j'suis à l'ouest...

  11. #11
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 408
    Par défaut
    Juste avant la commande de sauvegarde, c'est bon.

    Pour le reste, tu es selon ton expression, à l'ouest

    Pour comprendre, tu n'as qu'à faire les 2 commandes suivantes et tu verras la différence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    df --output=source /media/user/ | tail -1
    df --output=source /media/user/SSD32Go/ | tail -1
    ensuite tu retires ton disque SSD32Go et tu refais les 2 commandes

  12. #12
    Invité
    Invité(e)
    Par défaut
    j'ai testé les 2 commandes, que j'ai insérées à la ligne 36, du script indiqué #19 et commentées puis décommentées, l'une après l'autre, bien entendu, à moins qu'elles auraient pu fonctionner ensemble...
    le sachant pas, j'ai préféré les activer une à une !


    mais peut-être étaient-elles mal situées pour ce test, car j'ai obtenu avec la première commande :
    df --output=source /media/bernard/ | tail -1

    Exécuter la sauvegarde SovTotale-1 ? [o/N]
    ===============================================
    Lancement sauvegarde SovTotale-1 à : 20:29:30 le 19-04-2018
    ===============================================
    /dev/sda2
    ============================================
    Synchronisation en cours sur SSD32Go
    ...
    puis avec la seconde commande


    df --output=source /media/bernard/SSD32Go/ | tail -1

    Exécuter la sauvegarde SovTotale-1 ? [o/N]
    ===============================================
    Lancement sauvegarde SovTotale-1 à : 20:31:48 le 19-04-2018
    ===============================================
    /dev/sde1
    ============================================
    Synchronisation en cours sur SSD32Go
    ...
    C'est la seconde qui est juste, car le ssd32Go est bien en sde1 !

    par contre, j'ai déconnecté le ssd puis relancé... bouh... il tente d'écrire... heureusement que Ctrl+C l'arrête bien...
    mais il va falloir que je nettoie /media/SSD32Go... car le ssd s'y est créé...

    aurai-je dû apercevoir d'autres éléments ?

Discussions similaires

  1. Réponses: 40
    Dernier message: 12/05/2023, 11h39
  2. Réponses: 3
    Dernier message: 13/12/2017, 18h25
  3. if qui ne fait pas ce que je souhaite faire.
    Par Antoniom dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 10/12/2010, 13h04
  4. Que choisir pour faire un Client/Serveur
    Par Crayon dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/04/2005, 18h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo