« LINUX:RSYNC-jour/semaine/mois » : différence entre les versions

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 9 : Ligne 9 :


=Script=
=Script=
Ce script a pour objectif de faire le même genre de travail.
Ce script a pour objectif de faire le même genre de travail. Il est basé aussi sur "rsync". "rsync" permet de synchroniser une source avec sa cible; il ne copie que ce qui a été modifié (répertoires, fichiers, privilèges, dates,...).


fichier "'''rsync.jsm.bat'''"
Voici le contenu du script que nous avons baptisé "'''rsync.jsm.bat'''":
----
----
  #!/bin/csh
  #!/bin/csh
Ligne 105 : Ligne 105 :
  date
  date
----
----
En entête, trois variables sont à adapter selon vos besoins.
Ces répertoires doivent exister ainsi que le répertoire "courant" se trouvant sous le répertoire repris à la variable "BASE".


Ensuite il teste le contenu d'un fichier et des processus afin de détecter si une autre tâche de synchronisation n'est pas encore en cours.


=CRON=
L'exécution de ce script peut s'automatiser via le service "cron".
On peut ajouter une ligne dans le fichier "/etc/crontab":
----
30  23  *  *  *  root /manager/sauvegarde/rsync.jsm.bat  >  /manager/sauvegarde/rsync.jsm.log
----
Dans ce exemple, il s'exécute tous les jours à 23h30 sous une cession de l'utilisateur "root".





Version du 2 février 2022 à 17:57

But

Maintenant que tous les fichiers les plus récents sont rassemblés, il faut pouvoir remonter dans le temps car il est courant qu'on se rende compte un peu tard que l'on a modifié ou détruit un fichier important.

Il y a quelques années, on effectuait les sauvegardes sur bandes magnétiques. On réservait quatre bandes pour chaque jours de la semaine ouvrable et 4 bandes pour les différentes pour les différents vendredis du mois. On les utilisait en tournante. Par sécurité, ces bandes était soit remportées chez une personne de confiance soit mises dans un coffre à la banque.

Avec le temps, la masse de données à sauver devenant importante et de même le temps de sauvegarde, on se tourne vers des sauvegardes sur disques.


Script

Ce script a pour objectif de faire le même genre de travail. Il est basé aussi sur "rsync". "rsync" permet de synchroniser une source avec sa cible; il ne copie que ce qui a été modifié (répertoires, fichiers, privilèges, dates,...).

Voici le contenu du script que nous avons baptisé "rsync.jsm.bat":


#!/bin/csh
#####################################################
# variables à adapter
#
# répertoire de la base des sauvegardes
set BASE=/produc/backup
# répertoire des journaux
set DIRLOG=/produc/backup/log
#####################################################
# TEST: si la sauvegarde de centralisation est en cours, attendre 10 secondes
set TEST2=`/bin/cat ${DIRLOG}/rsync.courant.lock`
if ( "$TEST2" != "fin" ) then
 /bin/sleep 10s
endif
cd $BASE
# création des variables temporelles
# date format
#  %d jour du mois (2 digits)
#  %u jour de la semaine (1 à 7)
#  %w jour de la semaine (0 à 6) (0=dimanche)
#  %e jour du mois (espace en début à la place du 0)
#  %m mois (2 digits)
#  %y annee (2 digits)
#  %Y annee (4 digits)
date
set NOW=`date +%u`
set REPERTOIREJ=j$NOW
set NOM=`date +%m`
#set REPERTOIREM=m${NOM}
set NOJ=`date +%d`
# calcul du n° de semaine dans le mois (0 à 4)
# attention: la 5ème semaine (4) de fin de mois est courte (29 à 31)
set NOS=`expr ${NOJ} / 7`
set REPERTOIRES=s${NOS}
set NOA=`date +%y`
#set REPERTOIREA=a${NOA}
echo Jour de la semaine: $NOW
echo Jour du mois: $NOJ
echo Semaine du mois: $NOS
echo Mois: $NOM
echo Année: $NOA
# création des répertoires de sauvegarde si inexistants
if ( ! -d ${BASE}/${REPERTOIRES} ) then
 mkdir ${BASE}/${REPERTOIRES}
endif
if ( ! -d ${BASE}/${REPERTOIREJ} ) then
 if ( $NOW != 7 ) then
  mkdir ${BASE}/${REPERTOIREJ}
 endif
endif
#if ( ! -d ${BASE}/${REPERTOIREM} ) then
# mkdir ${BASE}/${REPERTOIREM}
#endif
#if ( ! -d ${BASE}/${REPERTOIREA} ) then
# mkdir ${BASE}/${REPERTOIREA}
#endif
# TEST: si un autre processus rsync est encore en cours, ne pas démarrer celui-ci
set TEST1=`ps ax | grep "rsync -a --delete --stats " | grep -v grep`
set TEST2=`ps ax | grep "rsync --server " | grep -v grep`
set TEST3=`ps ax | grep "rsync " | grep -v grep`
if ( "$TEST3" == "" ) then
 if ( "$TEST1" == "" && "$TEST2" == "" ) then
  echo debut > ${DIRLOG}/rsync.jsm.lock
  date +%Y/%m/%d\ %H:%M:00 >> ${DIRLOG}/log.jsm.lis
# sauvegarde annuelle (actif les 4 premiers jours de janvier)
#  if ( $NOM == "01" && $NOJ < "05") then
#   /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.annee.log ${BASE}/courant/ ${BASE}/${REPERTOIREA}
#   /usr/bin/date > ${BASE}/${REPERTOIREA}/date.log
#  endif
# sauvegarde mensuelle (actif les 4 premiers jours du mois)
#  if ( $NOJ < "05") then
#   /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.mois.log ${BASE}/courant/ ${BASE}/${REPERTOIREM}
#   /usr/bin/date > ${BASE}/${REPERTOIREM}/date.log
#  endif
# sauvegarde hebdomadaire, le dimanche, dernier jour de la semaine
  if ( $NOW == 7 ) then
   /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.semaine.log ${BASE}/courant/ ${BASE}/${REPERTOIRES}
   /usr/bin/date > ${BASE}/${REPERTOIRES}/date.log
# sauvegarde journalière sauf le dimanche qui est le jour de la sauvegarde hebdomadaire
  else
   /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.jour.log ${BASE}/courant/ ${BASE}/${REPERTOIREJ}
   /usr/bin/date > ${BASE}/${REPERTOIREJ}/date.log
  endif
  echo fin > ${DIRLOG}/rsync.jsm.lock
 else
  echo "Occupé: sauvegarde encore en cours"
 endif
else
 echo "Occupé: autre process rsync en cours"
endif
date

En entête, trois variables sont à adapter selon vos besoins. Ces répertoires doivent exister ainsi que le répertoire "courant" se trouvant sous le répertoire repris à la variable "BASE".

Ensuite il teste le contenu d'un fichier et des processus afin de détecter si une autre tâche de synchronisation n'est pas encore en cours.




CRON

L'exécution de ce script peut s'automatiser via le service "cron".

On peut ajouter une ligne dans le fichier "/etc/crontab":


30   23   *   *   *  root /manager/sauvegarde/rsync.jsm.bat  >  /manager/sauvegarde/rsync.jsm.log

Dans ce exemple, il s'exécute tous les jours à 23h30 sous une cession de l'utilisateur "root".





->retour à RSYNC