« LINUX:RSYNC-jour/semaine/mois » : différence entre les versions
(Page créée avec « __FORCETOC__ =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… ») |
Aucun résumé des modifications |
||
Ligne 3 : | Ligne 3 : | ||
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. | 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. | |||
fichier "'''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 | |||
---- | |||
Version du 2 février 2022 à 17:52
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.
fichier "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