Bin-Bash, scripts, ligne de commande
J’avais pris cela sur un site, je ne sais plus où et ça a bien fonctionné un certain temps puis plus rien lorsque j’ai passé un des serveurs qui était sous Ubuntu serveur 12.04 sous Debian 8.7
J’ai donc repris en grande partie, même si les bases restent les mêmes. Voici donc la version fonctionnelle.
Sur Debian 8.7
Automatiser les sauvegardes.
Dans cet exemple, il s’agit de sauvegarder chaque jour de la semaine (samedi, dimanche, lundi, mardi, etc.), puis le vendredi soir, on sauvegarde sur le n° de la semaine. Puis on repart sur samedi, dimanche, etc.
Avant tout vous devez définir le « lieux » de sauvegarde, s’agit-il d’un disque dur supplémentaire, d’un disque externe, d’un lieu distant (par ssh ou autres)… Bref vous devrez adapter les scripts à vos choix et besoin.
Il s’agit là d’une idée sur le principe, à chacun de se l’approprier.
Ici je vais partir du principe que j’ai un disque dur chiffré supplémentaire monté sur /mnt/
Il est nommé « save » et le répertoire de sauvegarde est « s_server »
ce qui donne le chemin de sauvegarde « /mnt/save/s_server »
Avant tout, vous devez savoir en quelle langue sont vos jours de la semaine (anglais, français, etc.).
date +%A vendredi
Le résultat est Français.
Connectez-vous en administrateur.
su root
Créer le script qui créera les répertoires des n° de semaine et les jours de la semaine.
#!/bin/bash
for x in lundi mardi mercredi jeudi vendredi samedi dimanche {01..52}
do
mkdir $x
done
Pourquoi {01..52} et non {1..52}? il suffit de lire le man date
man date (...) %V ISO week number, with Monday as first day of week (01..53) (...)
On voit donc qu’il faut numéroté de 01 à 52, car la 53ème semaine, lorsqu’elle existe est à cheval entre deux années et c’est donc pas dramatique de rater une semaine.
Rendre le script exécutable et on le place (dans notre exemple plus haut) dans « /mnt/save/s_server/ », puis on l’exécute…
./faire_mkdir.sh
Un petit « ls » pour vérifier que tout est ok.
Nous allons créer un fichier des dossiers à exclure. Si votre sauvegarde est locale, il faudra exclure le dossier de sauvegarde 😉 dans notre cas « /mnt/save/s_server/ » vous pouvez exclure tout ce qui ne vous semble pas judicieux, à vous de voir.
cd /etc/ nano rsync.exclude
On y met tout ce que l’on souhaite exclure.
Ci-dessous « /mnt/ » obligatoire dans l’exemple puisque la sauvegarde ce fait sur « /mnt/save/s_server/ », le reste en fonction de vos besoins.
Faites un copié/collé de ce qu’il y a ci-dessous.
# Mettez ici tous les dossiers que vous souhaitez exclure # - /boot/ - /media/ - /lost+found/ - /mnt/ - /proc/ - /opt/ - /run/ - /srv/ - /tmp/ - /sys/
Créer les deux scripts ci dessous:
nano /etc/cron.daily/jour.sh
Copié/collé de ce qu’il y a ci-dessous
#!/bin/bash # On va l'appeler "jour.sh" # Sauvegarde quotidienne jour=$(date +%A) source="/" destination="/mnt/save/s_server" rsync -aurov -progress --delete --stats --exclude-from=/etc/rsync.exclude $source $destination/$jour
Ce qui donne le chemin /etc/cron.daily/jour.sh et rendez-le exécutable.
chmod +x /etc/cron.daily/jour.sh
Puis:
nano /etc/cron.weekly/semaine.sh
Copié/collé de ce qu’il y a ci-dessous
#!/bin/bash # On va l'appeler "semaine.sh" # Sauvegarde hebdomadaire semaine=$(date +%V) source="/" destination="/mnt/save/s_server" rsync -aurov -progress --delete --stats --exclude-from=/etc/rsync.exclude $source $destination/$semaine
Ce qui donne le chemin /etc/cron.weekly/semaine.sh et rendez-le exécutable.
Chmod +x /etc/cron.weekly/semaine.sh
Maintenant il suffit juste de créer la crontab
crontab -e
Choisissez votre interprétateur texte « nano » ou « vi » et copiez les lignes ci-dessous:
PATH=/usr/sbin:/usr/bin:/sbin:/bin SHELL=/bin/sh MAILTO="" # m h dom mon dow command 0 23 * * * /etc/cron.daily/jour.sh >/dev/null 2>&1 # JOB_1 30 23 * * 5 /etc/cron.weekly/semaine.sh >/dev/null 2>&1 # JOB_2
Pour Ubuntu ce devrait ressembler à cela:
PATH=/usr/sbin:/usr/bin:/sbin:/bin SHELL=/bin/sh MAILTO="" # m h dom mon dow command 0 23 * * * sudo /etc/cron.daily/jour.sh >/dev/null 2>&1 # JOB_1 30 23 * * 5 sudo /etc/cron.weekly/semaine.sh >/dev/null 2>&1 # JOB_2
Ensuite vérifier le lendemain si la sauvegarde à bien fonctionné et revérifiez en fin de semaine.
