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 :

Scripts bash avec du SCP


Sujet :

Shell et commandes GNU

  1. #1
    Membre habitué
    Scripts bash avec du SCP
    Bonjour,

    Voila, j'ai fait un script qui va récupérer le dossier /etc/ de plusieurs équipements pour l'envoyer vers un serveur de sauvegarde de Conf.

    Cependant, j'aimerais rajouter la récupération d'un nouveau dossier (/root/scripts) qui, comme son nom l'indique var récupérer le dossier des scripts (bah oui, c'est sympa d'avoir la conf d'un équipement quand celui la plante pour le refaire assez vite, mais si on ne prend pas les scripts qui sont très utile c'est embêtant )

    Je n'ai pas réussi à trouver s'il était possible dans la même commande scp de copier 2 répertoires différents vers un destinataire.

    Donc pour moi j'ai 2 possibilités que je ne trouve pas très propre :

    1) Refaire un nouveau scp avec l'autre dossier (donc lancer à la suite 2 scp, ce qui est dommage car le 1er scp va se lancer, fermer la session pour en ré-ouvrir une 2eme)

    2) Rajouter dans le 1er dossier, un lien symbolique vers mon 2ème dossier (ce que je ne trouve pas très propre mais au moins ça marche )

    Voici mon script (qui sera amélioré plus tard).

    En gros, je vérifie si un dossier avec la date du jour existe, si oui je le supprime et je le recréais, si non je le créais tout simplement.

    Puis je vais lire un fichier csv, et pour chaque ligne, je vais lancer un scp pour récupérer le /etc.

    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
    #!/bin/bash -x
     
    ## Vérification si le dossier existe ##
    date=$(date '+%Y-%m-%d')
    dir="/data/Conf_eqpt/$1/Save_$date"
    if [ -d "$dir" ]; then
    echo "le dossier existe !"
    rm -rf $dir
    fi
     
    ## Création du dossier et sauvegarde des confs ##
    mkdir /data/Conf_eqpt/$1/Save_$date
    cat /root/Save_eqpt/noms.csv |sed "s/ /_/g" |while IFS=";" read nom ip
    do
    echo $nom
    sleep 3;
    mkdir /data/Conf_eqpt/$1/Save_$date/$nom
    scp -r -B -C -o ConnectTimeout=75 root@$ip:/etc/* /data/Conf_eqpt/$1/Save_$date/$nom/
    done
     
     
    ## Verifie si la sauvegarde c'est bien passée ##
    nb_ligne=$(cat /root/Save_eqpt/noms.csv | wc -l)
    nb_dossier=$(ls /data/Conf_eqpt/$1/Save_$date | wc -l)
    if [ $nb_ligne != $nb_dossier ]; then
    echo "La sauvegarde ne s'est pas bien passee." | mail -a "From: <a href="mailto:no-reply@tutu.com">no-reply@tutu.com</a>" -s "Erreur de la sauvegarde des equipements" <a href="mailto:alertes@tutu.com">alertes@tutu.com</a>
    fi
    echo FIN
    exit 0



    Si quelqu'un a une petite idée, je suis preneur avec volontiers

    Merci, et soyez indulgent, j'ai choisi le réseau car le développement était fâché avec moi, alors de temps en temps j'essaye de faire un peu de shell pour me réconcilier, mais il est repousse mes avances

  2. #2
    Expert éminent sénior
    http://www.joycebabu.com/blog/copyin...-with-scp.html

    oui on peut faire plusieurs copies avec un seul scp si il y a qu'une destination


    une autre solution est de faire une compression de tout ce qui doit être envoyé et de de décomprésser à l'arrivé où il faut....


    genre

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    tar -cf - /path/to/truc /anoth/erpath/to/machin | ssh -C destination 'cd /tmp && tar -xf - ; mv /tmp/truc /destination/truc ; mv /tmp/machin /destination/machin'