Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/04/2016, à 17:33

Alex97429

Récupération du fichier le plus récent sur un SFTP en bash

Bonjour! Après de nombreuses recherches sur Internet et n'ayant pas trouvé mon problème je poste ici pour la première fois!

Alors, j'effectue une sauvegarde de la base de donnée de GLPI grâce à mydqldump à l'aide d'un script écrit en bash.
La sauvegarde sous la forme "glpi_database_$current_date.sql" est automatiquement envoyé sur un serveur SFTP avec la commande lftp, toujours dans le même script. Tout fonctionne correctement jusque là.

J'aimerais ensuite créer un script restore_glpi qui me permettrait d'aller sur le sftp, chercher le fichier le plus récent du serveur puis le télécharger . Il existe ensuite une commande pour réintégrer cette sauvegarde dans GLPI.

J'ai trouvé plusieurs solutions, mais aucune n'a fonctionné et je suis novice en scripting!!

Merci de votre réponse! smile

Hors ligne

#2 Le 02/04/2016, à 09:43

serged

Re : Récupération du fichier le plus récent sur un SFTP en bash

Avec lftp, tu peux faire des scripts plus complets, justement. Pas lu toute la doc, mais il y a des options "mirror" et "backup" qui pourraient t'aider.


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#3 Le 03/04/2016, à 16:58

Alex97429

Re : Récupération du fichier le plus récent sur un SFTP en bash

merci de ta réponse! J'ai lu ce qu'il y avait sur ces options mais je n'ai rien trouvé pour récuperer le fichier sql le plus récent!
J'ai trouvé une autre solution qui consiste à chercher le fichier le plus récent avec ls, ou plutot le fichier situé en dernier avec head -1.
Il l'affiche, mais je voudrais maintenant mettre ce résultat dans une variable $backup, pour pouvoir la télécharger ensuite. Pour le moment j'ai ce début de script:

cd /var # se déplacer dans /var pour y sauvegarder le backup
lftp -d -u glpi,[pass] 192.168.1.37 <<FTP #connexion sftp
ls -1t | head -1 # me donne le dernier fichier présent sur le répertoire du FTP

# je voudrais ici mettre le résultat trouvé dans la variable $backup

get $backup [color=#5bb2eb]#Télécharger le fichier[/color]
bye
FTP

mysql -u root -p[pass] glpi < $backup #Voilà la commande pour réinporter le fichier sql dans la base GLPI

Merci de votre aide smile


J'ai modifié un peu mon code mais je ne sais pas si ça peut marcher de cette façon! En tout cas là ça ne fonctionne pas, mais j'ai peut-être fait une erreur quelque part!

#!/bin/bash

backup=$(ls -1t | head -1) #Résultat de la commande ls dans la variable $backup

cd /home/alexandre/restore #Dossier de téléchargement du fichier SQL
lftp -d -u glpi,[pass] 192.168.1.37 <<FTP  #Connexion au serveur SFTP avec LFTP

get $backup #téléchargement du fichier SQL

bye
FTP


mysql -u root -p[pass] glpi < $backup #restauration de la BDD Mysql de GLPI

Dernière modification par Alex97429 (Le 03/04/2016, à 18:14)

Hors ligne

#4 Le 03/04/2016, à 20:40

Totor

Re : Récupération du fichier le plus récent sur un SFTP en bash

Suivant la fréquence de tes sauvegarde, tu peux utiliser l'option --newer-than de mirror.
Pour exemple, si tes sauvegardes sont quotidiennes, ceci devrait le faire :

rm glpi_database_*.sql
lftp -d -u glpi,[pass] 192.168.1.37 -c 'mirror --include-glob=glpi_database_*.sql --newer-than=1days'

Note : j'ai ajouté un rm avant la commande pour être sur de downloader le fichier.
Si il est déjà présent, mirror ne le récupère pas, même si il est corrompu localement.

Dernière modification par Totor (Le 03/04/2016, à 20:40)


-- Lucid Lynx --

Hors ligne

#5 Le 04/04/2016, à 13:51

Alex97429

Re : Récupération du fichier le plus récent sur un SFTP en bash

Bonjour! J'ai testé la dernière commande, donc j'ai cela:

#!/bin/bash

cd /home/alexandre/restore #Dossier de téléchargement du fichier SQL
rm glpi_database_*.sql
lftp -d -u glpi,[pass] 192.168.1.37 -c 'mirror --include-glob=glpi_database_*.sql --newer-than=1days' <<FTP
bye
FTP

mysql -u root -padmin-btssio2 glpi < glpi_database_*.sql  #restauration de la BDD Mysql de GLPI

Mais j'obtiens cette erreur:

---> DELE glpi_database_*.sql
<--- 550 Could not delete glpi_database_*.sql: No such file or directory
rm: L'accès a échoué : 550 Could not delete glpi_database_*.sql: No such file or directory
lftp : option invalide -- 'c'
Essayez « lftp --help » pour plus d'informations
---> QUIT
<--- 221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
<--- 221 Logout.
---- Fermeture du socket de contrôle
restore_glpi: 13: restore_glpi: cannot open glpi_database_*.sql: No such file

Donc j'ai modifié -c par -e car j'ai vu sur Internet que pour faire une commande lftp il fallait mettre -e, j'ai donc une erreur en moins, ce qui me donne:

#!/bin/bash

cd /home/alexandre/restore #Dossier de téléchargement du fichier SQL
rm glpi_database_*.sql

#lftp -d -u glpi,[pass] 192.168.1.37 <<FTP  #Connexion au serveur SFTP avec LFTP
lftp -d -u glpi,[pass] 192.168.1.37 -e "mirror --include-glob=glpi_database_*.sql --newer-than=1days" <<FTP
bye
FTP

#mysql -u root -p[pass] glpi < glpi_database_*.sql  #restauration de la BDD Mysql de GLPI

Donc avec ce résultat:

WARNING: Certificate verification: certificate common name doesn't match requested host name « 192.168.1.37 »
<--- 226-Options: -l
<--- 226 39 matches total
---- Got EOF on data connection
---- Fermeture du socket de données
---> TYPE I
<--- 200 TYPE is now 8-bit binary
---> MDTM glpi_database_2016-03-28_23-02.sql
<--- 213 20160328182313
....
---> MDTM glpi_database_2016-04-04_15-10.sql
<--- 213 20160404111012
---> QUIT
<--- 221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
<--- 221 Logout.
---- Fermeture du socket de contrôle

Dernière modification par Alex97429 (Le 04/04/2016, à 14:16)

Hors ligne