A voir également:
- Efacer contenu d'un dossier par date
- Dossier appdata - Guide
- Mettre un mot de passe sur un dossier - Guide
- Impossible de supprimer un dossier - Guide
- Word a trouvé du contenu illisible - Guide
- Comment faire un dossier pdf - Guide
5 réponses
jivef
Messages postés
927
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
12 novembre 2020
306
Modifié par jivef le 27/09/2010 à 21:16
Modifié par jivef le 27/09/2010 à 21:16
Bonjour,
En fait, il y a un conseil que je voudrais te donner pour que tes dossiers soient toujours classés dans un ordre chronologique lorsque tu les listes :
Remplace
NOW="$(date +"%d-%m-%Y_%Hh%M")"
par
NOW="$(date +"%Y-%m-%d_%Hh%M")"
Pour la suite, voici un script qui fait exactement ce que tu veux et que j'ai mis en place il y a quelques mois :
Je créé des sauvegardes sur un disque USB, leur nom commence par savYYYYMMJJ
Je ne garde que 30 jours de sauvegarde, donc je fais ceci :
#suppression des sauvegardes de plus de 30 jours.
find /media/usbdsk -ctime +30 -type d -name sav* -exec rm -r {} \;
ls -R /media/usbdsk/$vardate > /usr/scripts/sauvegarde.log
Donc pour supprimer les fichiers de sauvegardes de plus de 5 jours, tu transforme le 30 en 5.
Si tu veux, pour la forme, je te mets le script intégral en dessous :
Certains choix peuvent te paraître bizarres, mais je suis le seul à travailler sur systèmes Unix ou GNU/Linux dans ma société et si je veux que mes collègues soient capables faire une restauration sans m'appeler, il faut faire simple.
#!/bin/bash
# Script de sauvegarde du dossier /home
#echo definition de la variable de date servant creer les repertoires de sauvegarde
vardate=sav'date +%Y%m%d%H%M'
echo $vardate
sleep 2
# montage du disque
mount /dev/sdb1 /media/usbdsk -o rw
case $? in
0) echo "le montage a fonctionne."
;;
*) echo "erreur de montage du volume de sauvegarde, peut-etre etait-il deja monte..."
;;
esac
# verification du montage du disque :
mount | grep "/dev/sdb1 on /media/usbdsk type vfat (rw)"
case $? in
0) echo "le disque est present"
;;
*) mutt -s "Sauvegarde SAT - GNU/Linux - disque non monte " sauvegarde@mondomaine.pf < /usr/scripts/mounterreur.txt
sleep 5
exit 0
;;
esac
mkdir -p /media/usbdsk/$vardate
echo $?
echo ci-dessus resultat mkdir
sleep 2
# Ci dessous ligne permettant de creer un dossier identique a celui d'origine avec cpio
find /home/* | cpio -pmd /media/usbdsk/$vardate
sleep 2
echo suppression des sauvegardes de plus de 30 jours.
find /media/usbdsk -ctime +30 -type d -name sav* -exec rm -r {} \;
ls -R /media/usbdsk/$vardate > /usr/scripts/sauvegarde.log
mutt -s "Sauvegarde SAT - GNU/Linux" sauvegarde@mondomaine.pf < /usr/scripts/sauvegarde.log
umount /media/usbdsk
sleep 10
/sbin/shutdown -h +45 "Attention arret du serveur dans 45 secondes. - Seul root peut annuler avec shutdown -c "
Ne t'étonne pas si j'arrête le serveur après la sauvegarde, c'est simplement parce qu'à Tahiti, il y a certains endroit où les coupures de courant sont très fréquentes, de plus ici, l'électricité est principalement d'origine thermique, donc polluante.
Une idée reçue est souvent une idée morte.
En fait, il y a un conseil que je voudrais te donner pour que tes dossiers soient toujours classés dans un ordre chronologique lorsque tu les listes :
Remplace
NOW="$(date +"%d-%m-%Y_%Hh%M")"
par
NOW="$(date +"%Y-%m-%d_%Hh%M")"
Pour la suite, voici un script qui fait exactement ce que tu veux et que j'ai mis en place il y a quelques mois :
Je créé des sauvegardes sur un disque USB, leur nom commence par savYYYYMMJJ
Je ne garde que 30 jours de sauvegarde, donc je fais ceci :
#suppression des sauvegardes de plus de 30 jours.
find /media/usbdsk -ctime +30 -type d -name sav* -exec rm -r {} \;
ls -R /media/usbdsk/$vardate > /usr/scripts/sauvegarde.log
Donc pour supprimer les fichiers de sauvegardes de plus de 5 jours, tu transforme le 30 en 5.
Si tu veux, pour la forme, je te mets le script intégral en dessous :
Certains choix peuvent te paraître bizarres, mais je suis le seul à travailler sur systèmes Unix ou GNU/Linux dans ma société et si je veux que mes collègues soient capables faire une restauration sans m'appeler, il faut faire simple.
#!/bin/bash
# Script de sauvegarde du dossier /home
#echo definition de la variable de date servant creer les repertoires de sauvegarde
vardate=sav'date +%Y%m%d%H%M'
echo $vardate
sleep 2
# montage du disque
mount /dev/sdb1 /media/usbdsk -o rw
case $? in
0) echo "le montage a fonctionne."
;;
*) echo "erreur de montage du volume de sauvegarde, peut-etre etait-il deja monte..."
;;
esac
# verification du montage du disque :
mount | grep "/dev/sdb1 on /media/usbdsk type vfat (rw)"
case $? in
0) echo "le disque est present"
;;
*) mutt -s "Sauvegarde SAT - GNU/Linux - disque non monte " sauvegarde@mondomaine.pf < /usr/scripts/mounterreur.txt
sleep 5
exit 0
;;
esac
mkdir -p /media/usbdsk/$vardate
echo $?
echo ci-dessus resultat mkdir
sleep 2
# Ci dessous ligne permettant de creer un dossier identique a celui d'origine avec cpio
find /home/* | cpio -pmd /media/usbdsk/$vardate
sleep 2
echo suppression des sauvegardes de plus de 30 jours.
find /media/usbdsk -ctime +30 -type d -name sav* -exec rm -r {} \;
ls -R /media/usbdsk/$vardate > /usr/scripts/sauvegarde.log
mutt -s "Sauvegarde SAT - GNU/Linux" sauvegarde@mondomaine.pf < /usr/scripts/sauvegarde.log
umount /media/usbdsk
sleep 10
/sbin/shutdown -h +45 "Attention arret du serveur dans 45 secondes. - Seul root peut annuler avec shutdown -c "
Ne t'étonne pas si j'arrête le serveur après la sauvegarde, c'est simplement parce qu'à Tahiti, il y a certains endroit où les coupures de courant sont très fréquentes, de plus ici, l'électricité est principalement d'origine thermique, donc polluante.
Une idée reçue est souvent une idée morte.
jeanbi
Messages postés
15118
Date d'inscription
samedi 9 décembre 2006
Statut
Contributeur
Dernière intervention
6 février 2023
2 182
Modifié par jeanbi le 26/09/2010 à 19:57
Modifié par jeanbi le 26/09/2010 à 19:57
bonjour,
peut etre ça ...
a+
ps : en attendant le passage des pro du script je ne nommerai personne :-)
FC 13 - Mandriva 2010 -Debian squeeze-
Les meilleures choses ont besoin de patience.(JC ANGLADE)
penser aux astuces
Exemple: Rechercher (find) à partir du répertoire courant (.) sans inclure les sous-répertoires (-maxdepth 1) tous les fichiers classiques (-type f) de l'utilisateur vandit (-user vandit) "créé" (dernière modification du statut) il y'a plus de 30*24h (Lorsque find calcule le nombre de période de 24 heures la partie fractionnelle est ignorée. Ainsi, pour correspondre à -ctime +1, un fichier doit avoir au moins deux jours)(-ctime +29) et supprimer les fichiers trouvés (-exec rm {} \;) $ find . -maxdepth 1 -type f -user vandit -ctime +29 -exec rm {} \;
peut etre ça ...
a+
ps : en attendant le passage des pro du script je ne nommerai personne :-)
FC 13 - Mandriva 2010 -Debian squeeze-
Les meilleures choses ont besoin de patience.(JC ANGLADE)
penser aux astuces
Alors je vais essayer d'aller droit au but ce sera plus simple ;=)
J'ai le script suivant:
Donc comme vous le voyez le fonctionnement est simple; il se connecte au serveur MySQL pour sauvegarder les bases une à une en TGZ sur un dossier avec pour nom la date et heure. Donc a chaque fois que le crontab est exécuté, un nouveau dossier est crée à l'intérieur de $DEST.
Ce que je veux c'est que, AVANT l'exécution de la sauvegarde (l'echo dans le script) il scanne le dossier DEST à la recherche de dossiers en J-5 et les efface tous. Ce qui me permet de toujours avoir une copie de sauvegarde de mon SQL en J-5.
Voila, et si le script en état peut vous servir tant mieux ;)
J'ai le script suivant:
#!/bin/bash Mysql_User="user" Mysql_Paswd="passwd" Mysql_host="localhost" MYSQL="$(which mysql)" MYSQLDUMP="$(which mysqldump)" CHOWN="$(which chown)" CHMOD="$(which chmod)" GZIP="$(which gzip)" DEST="/home/user/backups/backup_sql/" NOW="$(date +"%d-%m-%Y_%Hh%M")" DEST_mysql="$DEST/$NOW" IGGY="" FILE="" DBS="" echo "Début de la sauvegarde et compression du serveur MySQL $Mysql_User vers $DEST" date echo # On crée le répertoire défini précédemment [ ! -d $DEST_mysql ] && mkdir -p $DEST_mysql || : # On limite l'accés au root uniquemment si nécessaire (dé-commenter les deux lignes) #$CHOWN 0.0 -R $DEST_mysql #$CHMOD 0600 $DEST_mysql # On liste les bases de données associés au compte défini en début de script DBS="$($MYSQL -u $Mysql_User -h $Mysql_host -p$Mysql_Paswd -Bse 'show databases')" for db in $DBS do skipdb=-1 if [ "$IGGY" != "" ]; then for i in $IGGY do [ "$db" == "$i" ] && skipdb=1 || : done fi if [ "$skipdb" == "-1" ] ; then FILE="$DEST_mysql/$db.$NOW.gz" # On boucle, on dump toutes les bases de données et on les compresse individuellement avant sauvegarde sur le FTP $MYSQLDUMP -u $Mysql_User -h $Mysql_host -p$Mysql_Paswd $db | $GZIP -9 > $FILE fi done # Enregistrement de l'heure de finalisation du processus echo "Sauvegarde MySQL du compte $Mysql_User terminée !" date echo # Listing des fichiers et vérification des tailles ls -lh $DEST
Donc comme vous le voyez le fonctionnement est simple; il se connecte au serveur MySQL pour sauvegarder les bases une à une en TGZ sur un dossier avec pour nom la date et heure. Donc a chaque fois que le crontab est exécuté, un nouveau dossier est crée à l'intérieur de $DEST.
Ce que je veux c'est que, AVANT l'exécution de la sauvegarde (l'echo dans le script) il scanne le dossier DEST à la recherche de dossiers en J-5 et les efface tous. Ce qui me permet de toujours avoir une copie de sauvegarde de mon SQL en J-5.
Voila, et si le script en état peut vous servir tant mieux ;)
Si jeanbi ou un autre pouvait me confirmer l'adaptation du code a mon script ce serait sympa.
Merci à vous.
Merci à vous.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question