Script de backup avec limitation du nombre de sauvegardes sur le serveur distant

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
Répondre
js-martin
Messages : 474
Enregistré le : 22 mars 2015, 22:08
Contact :

Script de backup avec limitation du nombre de sauvegardes sur le serveur distant

Message par js-martin »

Bonjour,

J'ai un ami qui utilise le script de sauvegarde FTP mais qui regrettait qu'il y avait un fichier de plus chaque jour sur son espace de stockage.

Rappel du lien : http://easydomoticz.com/backup-journali ... rveur-ftp/

Je n'avais pas encore protégé ma base de données Domoticz, alors j'ai regardé comment faire. Je n'ai pas besoin de sauvegarder les scripts (je n'ai pas prévu de les modifier quotidiennement ;) ), donc je suis parti de le code sur le wiki de Domoticz qui ne sauvegarde que la base de données : http://www.domoticz.com/wiki/Daily_back ... ternal_hdd

J'ai ajouté une variable :

Code : Tout sélectionner

MAX_FILES=7 
elle indique le nombre maxi de sauvegarde de la base de données. Avec une sauvegarde par jour, cela vous permet d'avoir une semaine roulante de sauvegardes.

Voici le script complet opérationnel :

Code : Tout sélectionner

#!/bin/bash
# LOCAL/FTP/SCP/MAIL PARAMETERS
SERVER="192.168.0.20"   # IP of Network disk, used for ftp
USERNAME="my_login"         # FTP username of Network disk used for ftp
PASSWORD="my_password"         # FTP password of Network disk used for ftp
DESTDIR="/public/backup_domoticz"   # distant storage
DOMO_IP="192.168.0.10"  # Domoticz IP
DOMO_PORT="8080"        # Domoticz port
MAX_FILES=7        # Max history files
### END OF USER CONFIGURABLE PARAMETERS

TIMESTAMP=`/bin/date +%Y%m%d%H%M`
BACKUPFILE="domoticz_$TIMESTAMP.db" # backups will be named "domoticz_YYYYMMDDHHMM.db.gz"
BACKUPFILEGZ="$BACKUPFILE".gz

### Create backup and ZIP it
curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /tmp/$BACKUPFILE
gzip -9 /tmp/$BACKUPFILE

### Send to Network disk through FTP
curl -s --disable-epsv -v -T"/tmp/$BACKUPFILEGZ" -u"$USERNAME:$PASSWORD" "ftp://$SERVER$DESTDIR/"

### Get list of distant FTP directory
curl -s -l -o /tmp/list.tmp  -u"$USERNAME:$PASSWORD" "ftp://$SERVER$DESTDIR/"

### Get number of distant backup
nb_files=$(cat /tmp/list.tmp | wc -l)
echo "number of distant files = $nb_files "

###  MAX_FILES test
if [ "$nb_files" -gt "$MAX_FILES" ]
then
        echo "too much file on distant FTP server"
        older_file=$(sort /tmp/list.tmp | grep -m 1 "")
        echo "I delete $older_file"
        curl -s -Q "-DELE $older_file" -u"$USERNAME:$PASSWORD" "ftp://$SERVER$DESTDIR/"
fi

### Remove temp files
/bin/rm /tmp/$BACKUPFILEGZ
/bin/rm /tmp/list.tmp
### Done!

une petite explication pour les curieux :
je mets dans un fichier temporaire (-o /tmp/list.tmp), la liste des fichiers distants en ne gardant que le nom (-l)

Code : Tout sélectionner

curl -s -l -o /tmp/list.tmp  -u"$USERNAME:$PASSWORD" "ftp://$SERVER$DESTDIR/"
je compte le nombre de ligne de ce fichier (wc -l) et je mets cette valeur dans la variable $nb_files

Code : Tout sélectionner

nb_files=$(cat /tmp/list.tmp | wc -l)
Si l'on a atteind le nombre maximum de fichiers (if [ "$nb_files" -gt "$MAX_FILES" ]) alors je trie mon fichier temporaire (sort /tmp/list.tmp) et, par construction du nom de fichier, le plus ancien se retrouve en tête de liste ; du coup, je ne récupère que le premier nom ( grep -m 1 "")

Code : Tout sélectionner

older_file=$(sort /tmp/list.tmp | grep -m 1 "")
Enfin, il suffit de supprimer le fichier distant avec une commande curl "avancée" (le -Q indique que l'on passe en mode de commande car il n'y a pas d'options curl pour effacer directement)

Code : Tout sélectionner

curl -s -Q "-DELE $older_file" -u"$USERNAME:$PASSWORD" "ftp://$SERVER$DESTDIR/"
EDIT : pour un filesystem type UNIX, il y a parfois un fichier ".." qui se glisse dans la liste des fichiers.

Du coup, il suffit de remplacer la ligne :

Code : Tout sélectionner

older_file=$(  sort /var/tmp/list.tmp | grep -m 1 "")
par :

Code : Tout sélectionner

older_file=$(sed -n '/^.\{3\}/p' /var/tmp/list.tmp | sort | grep -m 1 "")
le sed -n '/^.\{3\}/p' va supprimer tous les fichiers parasites de moins de 3 caractères ;)
Modifié en dernier par js-martin le 26 mai 2015, 15:32, modifié 3 fois.
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien

Flintstones
Messages : 39
Enregistré le : 20 janv. 2015, 22:56

Re: Script de backup avec limitation du nombre de sauvegardes

Message par Flintstones »

Merci J-S ! Je mets le script ce soir.

js-martin
Messages : 474
Enregistré le : 22 mars 2015, 22:08
Contact :

Re: Script de backup avec limitation du nombre de sauvegardes

Message par js-martin »

Tu nous diras si cela fonctionne chez toi ;)
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien

Flintstones
Messages : 39
Enregistré le : 20 janv. 2015, 22:56

Re: Script de backup avec limitation du nombre de sauvegardes

Message par Flintstones »

testé et validé ;)

manuloup
Messages : 517
Enregistré le : 18 févr. 2015, 13:05

Re: Script de backup avec limitation du nombre de sauvegardes

Message par manuloup »

Bonjour,

Perso dans mon script j'utilise un bon vieux find -mtime des familles :

find . -name "*.tgz" -mtime +7 -exec rm -rf {} \;

Ca marche parfaitement :)
Rapberry PI 2 (RaspBian), RFplayer, Aeon Labs Z-Stick Gen5, Everspring ST814 Temperature Sensor, Everspring SF812 Smoke Detector, 4x Fibaro Wallplug, Aeon Zwave Miniremote , Teleinfo USB

js-martin
Messages : 474
Enregistré le : 22 mars 2015, 22:08
Contact :

Re: Script de backup avec limitation du nombre de sauvegardes

Message par js-martin »

Flintstones a écrit :testé et validé ;)
super !
manuloup a écrit :Perso dans mon script : find . -name "*.tgz" -mtime +7 -exec rm -rf {} \;
La difficulté manuloup est que les fichiers sont accessibles en FTP... Du coup, le "find ." ne marche pas sur le serveur distant...(ni le rm)
J'ai édité le titre pour que cela soit plus clair ;)
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien

Répondre