#1 Le 01/04/2016, à 16: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!
Hors ligne
#2 Le 02/04/2016, à 08: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, à 15: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
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, à 17:14)
Hors ligne
#4 Le 03/04/2016, à 19: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, à 19:40)
-- Lucid Lynx --
Hors ligne
#5 Le 04/04/2016, à 12: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, à 13:16)
Hors ligne