Fedora Core 3 et Script si machine UP
Je veux que mes données soient au maximum sécurisées afin de ne jamais les perdre, je fais donc très souvent des sauvegardes de ma station de travail vers mon serveur.
Mon serveur étant en ligne 24/24 je vais le charger de lancer les sauvegardes, mais ma station de travail n'est allumée que au moment où je l'utilise.
J'ai donc crée un script shell pour que mon serveur test si la machine est allumée et effectue une sauvegarde si celle - ci est allumée. Je vous partage donc mon script :
#! /bin/sh
#script by TitaX ( titax@rezium.net )
#http://www.titaxium.com http://www.rezium.net http://blog.titaxium.org
#Script qui lance une sauvegarde d'une machine seulement si celle-ci est UP
#variables#
machine="nom_ou_ip_de_votre_machine"
#script de sauvegarde a lancer au cas ou la machine est UP
script="/chemin/vers/script/script_de_sauvegarde.sh"
ping="ping -c 1 -w 3 -q $machine"
jour=`date +%d-%m-%Y`
log_ok="/var/log/sauvegardes/sauvegarde_OK_"$machine"_du_"$jour".log"
log_ko="/var/log/sauvegardes/sauvegarde_KO_"$machine"_du_"$jour".log"
rep_log="/var/log/sauvegardes/"
#script#
#debut du script
echo "debut de la tentative de sauvegarde de "$machine""
#test si la machine cible est UP
if $ping | grep -E "min/avg/max/mdev" > /dev/null
then
#si ping OK
echo ""$machine" est online"
echo "Debut de la sauvegarde de "$machine""
#creation fichier de log
touch "$log_ok"
echo "-" >> "$log_ok"
echo "Heure de debut de sauvegarde:" >> "$log_ok"
date >> "$log_ok"
echo "-" >> "$log_ok"
echo ""$machine" est UP donc sauvegarde en cours" >> "$log_ok"
#execution du script
$script
echo "-" >> "$log_ok"
echo "Heure de fin de sauvegarde:" >> "$log_ok"
date >> "$log_ok"
echo "-" >> "$log_ok"
echo "Les donnees de "$machine" sont bien sauvegardees" >> "$log_ok"
#si ping KO
else
#creation fichier de log
touch "$log_ko"
echo "-" >> "$log_ko"
echo "Heure de tentative de sauvegarde:" >> "$log_ko"
date >> "$log_ko"
echo "-" >> "$log_ko"
echo ""$machine" est pas UP donc pas de sauvegarde" >> "$log_ko"
echo ""$machine" est offline"
fi
# On detruit les fichiers vieux de plus de 30 jours
find "$rep_log" -atime +30 -exec rm -f {} \;
#fin du script
echo "fin de la tentative de sauvegarde de "$machine""
#fin script---#
Le script est téléchargeable en cliquant sur ce lien.
Il vous suffit ensuite de lui appliqué le CHMOD +x pour le rendre executable et de l'ajouter à votre crontab grâce à la commande crontab -e comme cela par exemple :
15 23 * * * /chemin/vers/votre/script
Pour une execution tous les jours à 23h15.
Aussi ce n'est pas ce script qui sauvegarde en effet il lance un autre script au cas où la machine cible réponds correctement au ping, le cscript de sauvegarde à proprement dit pourra être de cette forme :
#!/bin/sh
rsync -ave ssh oracle:/mnt/data/ /backup/data
N'hésitez pas à critiquer et donner votre avis sur ce script en commentaire pour que je puisse l'améliorer.
A+
Avec une coloration syntaxique on verrai plus clair :p
Sinon pourquoi ne pas implémenter une fonction qui ajoute un rappel si le poste est Down afin d'éviter une sauvegarde perdue. genre un rappel toutes les 30 min en cas de Down.
si le poste est down la sauvegarde ne se fait pas. Elle ne se fait qu'au momement où la machine est UP. Par contre si la machine est down et que la sauvegarde ne se fait pas on crée un fichier log.
Oui mais tu perds quand même une journée entière de sauvegarde. Si tu rajoute un évènement dans le crontab sur 23h30 avec une nouvelles tentatives, c'est pas plus sécure ? et ainsi de suite jusqu'à un UP.
Et bien pour mon cas non !
Car si ma machine est éteinte à 23h30 c'est qu'elle ne sera pas allumé plus tard.
Mais bien sûr que l'automatisation en cron doit évidement être adapté au besoin spécifique de chacun