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

Linux Discussion :

Script Bash Ftp backup cPanel [Débutant(e)]


Sujet :

Linux

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Script Bash Ftp backup cPanel
    Bonjour à tous,

    Je débute un peu en bash même si je connais quelques commandes linux.

    Je cherche à faire quelque chose d'à priori très simple mais je butte sur plusieurs points.

    Il s'agit d'un script qui sera appelé via un cron

    Ce que je cherche à faire :

    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
     
    #!/bin/bash
    date="$(date +%F)"
    ftp_host=’xx.xx.xx.xx’
    ftp_user=’xxxxx’
    ftp_pass=’xxxxx’
    local_folder=’/volume1/Sauvegardes’
     
    email_notif=’mon@adresse.com’
    purge_days=’8’
     
    # On se place dans le folder local de destination
    cd $local_folder
     
    # On se connecte au ftp distant
    # On liste les fichiers “backup-xxxx.tar.gz” à la racine
    # On boucle sur les résultats
    # On télécharge le fichier et on le place dans le dossier $local_folder
    # On le supprime du ftp distant
    # On ferme la connexion ftp
    # On supprime les fichiers “backup-xxx.tar.gz” plus vieux de $purge_days du dossier $local_folder
    # On envoie un email de notification à $email_notif avec le log des opérations
    Mes questions :

    1. Comment lister les fichiers ftp racine et ne garder que les .tar.gz ?
    2. Ensuite si je boucle sur chaque fichier trouvé, je dois le récupérer en ftp ou en wget ?
    Car je lis que c'est beaucoup plus rapide avec wget qu'avec ftp.
    En plus si je ne me trompe pas je peux récupérer que les fichiers qui m’intéresse (mes backup en tar.gz) via .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wget -b -A.tar.gz ftp://$ftp_user:$ftp_pass@$ftp_host
    Mais je dois me reconnecter avec les id via wget... là je suis perdu

    3. Auriez-vous un modèle propre de ce genre de loop for pour que je puisse supprimer "sereinement" les fichiers distants si et seulement si ils ont été correctement backupé en local.

    4. Si quelqu'un a un lien à me communiquer où je puisse trouver ce genre de script et l'adapter à mes besoins je suis preneur car je n'ai pas pour vocation à développer du bash tous les jours ;-)

    Merci pour votre aide

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    pour commencer tu peux sécuriser un peu, et te faciliter la vie à la fois avec un simple fichier de login automatique à ton ftp..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cat > ~/.netrc 
    machine ftp://ton.serveur.ftp
    login user
    password somepasseword
    ^D
    # utiliser Control+D ne pas taper "^D"
    chmod 0600 ~/.netrc
    si le ftp est à toi, changes de méthode, et horodate tes fichier backup....

    comme ça tu n'a pas de tri à faire, d'une part, et surtout ça interdira toute erreur potentielle future...

    du coup to script devient tout simple

    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
    #!/bin/sh
    destination=/chemin/que/tu/veux/
    serveur=ftp://ton.serveur.xx
    reportmail=toi@domain.xx
     
    cd $destination
    ping -c 1 $serveur 1> /dev/null 
    if [ $? -ne 0 ] ; then
        echo $serveur innaccessible
        exit 1
    fi
    ftp -i $serveur << EOT > /var/log/ftp.log
    get backup.$(date +%Y%m%d).tar.gz
    delete backup.$(date +%Y%m%d).tar.gz
    bye
    EOT
     
    (
            echo "From: toi@machine.locale"
            echo "To: "$reportmail
            echo "subject: rapport ftp"
            echo "MIME-Version: 1.0"
            echo "Content-Type: text/html"
            echo "Content-Disposition: inline"
            cat /var/log/ftp.log
    ) | /usr/sbin/sendmail -v $reportmail 2> /var/log/mail_ftp.err 
    if [ $? -ne 0 ] ; then
        code_retour=1
    else
        code_retour=0
    fi
    exit $code_retour
    ___________

    si tu as plusieurs manipulations à faire sur le serveur distant, pourquoi ne pas préférer monter un partage NFS, ouvert au lancement du script, manipuler, demonter le NFS.

    ça parait plus logique encore, et là tu as bien plus de possibilités...et de souplesse

    ___________

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    merci beaucoup frp31, ca m'avance énormément ça!

    Je vais regarder du coté NFS car je ne connais pas du tout mais de ce que j'en lis ca à l'air pratique.

    En revanche, le nom des fichiers backup sur le ftp distant est généré par le serveur donc je ne connais pas leur nom (ils incluent l'heure ex : backup-date_et_heure_de_generation_.tar.gz). C'est cPanel qui formate ainsi le backup complet de mon compte.

    Donc si je fais un sur la commande ftp, ca va filtrer les fichiers présents à la racine ?
    Et je pourrais ensuite boucler si il venait à y en avoir plusieurs...

    Et dernier point pour comprendre le mécanisme, quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    get backup.$(date +%Y%m%d).tar.gz
    Cette commande va attendre d'avoir téléchargé le fichier pour ensuite le supprimer à la ligne suivante ?

    Merci encore pour ton aide

  4. #4
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    le grep est une commande shell pas une commande ftp. donc ça limite

    les commandes ftp sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    !               bye             debug           form            idle            mdelete         more            open            put             reput           send            system          ?
    $               case            delete          ftp             image           mdir            mput            page            pwd             reset           sendport        tenex
    account         cd              dir             get             lcd             mget            msend           passive         quit            restart         site            trace
    append          cdup            disconnect      gate            less            mkdir           newer           preserve        quote           rhelp           size            type
    ascii           chmod           edit            glob            lpwd            mls             nlist           progress        recv            rmdir           status          umask
    bell            close           epsv4           hash            ls              mode            nmap            prompt          reget           rstatus         struct          user
    binary          cr              exit            help            macdef          modtime         ntrans          proxy           rename          runique         sunique         verbose
    tu peux par contre faire plusieurs passes
    1 récupérer la liste des fichiers
    2 l'analyser
    3 télécharger que le fichier qui t’intéresse
    c'est long et ça fait 2 connections consécutives.... mais ça marcherait bien aussi
    c'est là que NFS devient intéressant... ou sshfs ou ftpfs qui servent à monter "façon nfs" le contenu du FTP.

    comme ça tu obtiens un répertoire sur le quel tu travaille comme tu veux (c'est lent) mais ça marche parfaitement.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Ha ok, alors très bien!

    Oui ca "mount" un lecteur, du coup je me ballade dedans comme un rep local si j'ai bien compris.

    J'vais checker ca.

    Encore merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. script bash protocole ftp
    Par simendes dans le forum Programmation système
    Réponses: 0
    Dernier message: 09/05/2015, 03h22
  2. Réponses: 17
    Dernier message: 08/05/2015, 11h15
  3. Script Bash Backup répertoire
    Par exinvil dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 20/08/2013, 15h08
  4. Greffer du ftp dans mon script bash
    Par _shuriken_ dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 30/11/2010, 12h49
  5. bash : script pour ftp
    Par troumad dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 28/02/2010, 09h43

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