Skip to content

Catégorie : #Bash

Récupérer fichiers récursif via ftp en ligne de commande

Oula, ca fait un titre long… Je ne savais pas comment l’expliciter mieux… J’avais un besoin particulier, récupérer un site d’environ 20Go sur un serveur distant, depuis un de mes serveurs… C’est à dire pas d’interface disponible, et uniquement un accès ftp (certains hébergeurs ne connaissent pas le SSH chroot…). Ok, soit. Je test mget… Pas de bol, je dois faire chaque répertoire à la main…

Et la, la commande magique…

wget -r -N -l 100 ftp://user:pass@url...

Et ca fonctionne, et plutôt pas mal J’ai eu un pic a 60Mbps au début, et la, je suis redescendu à 30Mbps. Surement une limitation de l’hébergeur distant (ayant une carte 10Gbps et 1Gbps de bande passante sur mon dédié, je doute que ce soit moi…). Reste plus qu’a patienter…

Edit Maj. J’ai modifié un peu ma commande, en rajoutant -N -l 100 dans les paramètres. -N me permets de ne transférer que les fichiers mis à jour, et -l lui dit de naviguer sur 100 niveau. Cela me permets de mettre a jour un site de 5Go en moins de 10min (ayant peu de modification, évidemment)

Backup journalier serveur – script

Attention… Cet article a été écrit en février 2009 – Je ne l’ai aps encore réactualisé, juste transféré !

Quand on a un serveur dédié, ou même un poste sous Linux, on désire effectuer des sauvegardes, de manière régulière.

Je vous propose ici le script que j’utilise se mes serveurs dédiés, afin d’effectuer une sauvegarde journalière de mes sites, ainsi que de la base de donnée concernée. Le script permets de garder un historique de 7 jours des fichiers et des bases de données. Il ne s’agit pas d’un backup incrémentiel, mais bien total. Pourquoi? Par simplicité, pour éviter d’éventuels problèmes de perte de données intermédiaires, et parce que le backup que j’utilise (backup fournis avec mon dédié chez OVH) ne me permets que de faire du ftp => pas de rsync.

Le script effectue 2 sauvegardes. Tout d’abords il récupère un dump de la base de donnée (dump complète), puis il compresse chaque répertoire séparément. Finalement, il effectue un backup complet directement sur le ftp. Il faut prévoir suffisament de place sur le disque. D’autant que le script garde en local une copie des backups des 7 jours. Il est possible de les supprimer, pour cela, il suffit de faire un rm -rf du répertoire du jour (1-7) et de le recréer.

Néanmoins, je vous proposerais prochainement un script plus perfectionner, permettant de faire à la fois du rsync sur un serveur distant, et du ftp. Il s’agit d’un script sans grandes prétentions, mais qui permets d’avoir un backup fiable et simple à mettre en place!

N’oubliez pas d’adapter les informations de configuration en haut du script, de lui donner les droits d’exécution, et de le placer dans le crontab! Parmis les outils nécessaires au fonctionnement du script, pensez à installer ncftp (aptitude install ncftp), afin de disposer du programme ncftput.

#!/bin/bash



# Les constantes
ftp_login=”’
ftp_pwd=”
ftp_host=”
bdd_login=”
bdd_pwd=”
path_site=”
path_bkp=”
path_ftp=”
email_log=”
date=`date`

# erreurs de ncftput
declare -a CDERR
CDERR[1]=”Could not connect to remote host.”
CDERR[2]=”Could not connect to remote host – timed out.”
CDERR[3]=”Transfer failed.”
CDERR[4]=”Transfer failed – timed out.”
CDERR[5]=”Directory change failed.”
CDERR[6]=”Directory change failed – timed out.”
CDERR[7]=”Malformed URL.”
CDERR[8]=”Usage error.”
CDERR[9]=”Error in login configuration file.”
CDERR[10]=”Library initialization failed.”
CDERR[11]=”Session initialization failed.”
CDERR[142]=”Delai depasse pour la connexion.”

start=”file debut : $date — ”
id=`date +%u`

`mysqldump -u $bdd_login -p$bdd_pwd –all-database > $path_bkp/$id/mysqldump_$id.sql`
for site in `ls $path_site`
do
`rm -Rf $path_bkp/$id/$site”_”$id.tgz`
`tar czf $path_bkp/$id/$site”_”$id.tgz $path_site/$site`
done

`tar –create –gzip –file – $id | ncftpput -v -u $ftp_login -p $ftp_pwd -c $ftp_host $path_ftp/$id.tgz`

res_ftp=$?
if [ $res_ftp != "0" ]; then
`echo ${CDERR[$res_ftp]} | mailx -s “ERREUR LORS DU BACKUP DES FICHIERS !!!” $email_log`
fi

date=`date`
echo $start “fin: $date”

`ls -la $path_bkp/$id/ | mailx -s “Backup du $date” $email_log`