Avant de créer ce script, il nous faut créer un point de montage :
mkdir /home/your_username/mnt/nas_sauvegardes
Montez le chemin :
mount -t cifs //IP_DU_NAS/Sauvegardes /home/your_username/mnt/nas_sauvegardes -o rw,username=user,password=password
Vous pouvez aussi le rajouter dans le fstab :
Créez le fichier qui accueillerons vos credentials (cd /home/your_username/) :
echo "username=utilisateur" > ~/.smbcredentials
echo "password=motdepasse" >> ~/.smbcredentials
chmod 600 ~/.smbcredentials
Puis avec la commande sudo vi /etc/fstab ajoutez votre ligne au fstab :
//IP_DU_NAS/Sauvegardes /home/user/mnt/nas_sauvegardes cifs rw,credentials=/home/your_username/.smbcredentials,uid=1000,gid=1000 0 0
Testez votre montage avec la commande :
sudo mount -a
Il faut également les dépendance :
sudo apt install zip
Script :
#!/bin/bash
# Paramètres fournis lors de l'exécution
CHEMIN_LOCAL=$1
NOM_DOSSIER_CIBLE=$2
NB_MAX_SAUVEGARDES=$3
POINT_MONTAGE_NAS="/home/your_username/mnt/nas_sauvegardes"
# Variables
DESTINATION="$POINT_MONTAGE_NAS/$NOM_DOSSIER_CIBLE"
DATE=$(date +%Y%m%d%H%M)
FICHIER_SAUVEGARDE="$DESTINATION/$DATE.zip"
# Création du répertoire de destination s'il n'existe pas
mkdir -p "$DESTINATION"
# Compression du répertoire
zip -r "$FICHIER_SAUVEGARDE" "$CHEMIN_LOCAL"
# Gestion de la rétention
cd "$DESTINATION"
nb_fichiers=$(ls -1 *.zip 2>/dev/null | wc -l)
while [ "$nb_fichiers" -gt "$NB_MAX_SAUVEGARDES" ]; do
fichier_a_supprimer=$(ls -1t *.zip | tail -1)
rm -f "$fichier_a_supprimer"
nb_fichiers=$(($nb_fichiers - 1))
done
Voilà comment exécuter le script :
./sauvegarde.sh [Répertoire à sauvegarder] [Nom du dossier de destination] [Nombre de rétentions]
Exemple :
./sauvegarde.sh /data/Nextcloud Nextcloud 7
Avant d'exécuter le script, ne pas oublier de le rendre exécutable avec la commande chmod +x ./sauvegarde.sh.
Il ne reste plus qu'à intégrer ce script dans un crontab :
crontab -e
Ajoutez à la suite, et pour chaque répertoires :
0 1 * * * /home/your_username/sauvegarde.sh [Répertoire à sauvegarder] [Nom du dossier de destination] [Nombre de rétentions]