« LINUX:RSYNC-jour/semaine/mois » : différence entre les versions
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,...). | ||
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".