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
J'ai ajouté une variable :
Code : Tout sélectionner
MAX_FILES=7 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/"Code : Tout sélectionner
nb_files=$(cat /tmp/list.tmp | wc -l)Code : Tout sélectionner
older_file=$(sort /tmp/list.tmp | grep -m 1 "")Code : Tout sélectionner
curl -s -Q "-DELE $older_file" -u"$USERNAME:$PASSWORD" "ftp://$SERVER$DESTDIR/"Du coup, il suffit de remplacer la ligne :
Code : Tout sélectionner
older_file=$( sort /var/tmp/list.tmp | grep -m 1 "")Code : Tout sélectionner
older_file=$(sed -n '/^.\{3\}/p' /var/tmp/list.tmp | sort | grep -m 1 "")