IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Archivage automatique avec roulement


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut Archivage automatique avec roulement
    Bonjour,

    On m'a demander de concevoir un script pour faire de l'archivage automatique d'un dossier partagé sur NAS.
    Le script doit être exécuté sur un NAS QNAP en version 4.1 via crontab tous les dimanche à 12H.
    La difficulté est de garder les archives en fonction d'un "roulement".
    Le client souhaite avoir les archives hebdomadaires pendant 8 semaines + 3 archives trimestrielles + 1 annuelle.
    Cela est-il faisable ?
    J'ai regardé les possibilités avec certaines commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # variables
    folder=Administratif
    src=/share/MD0_DATA/
    dest=/share/MD0_DATA/ArchivesNAS/$folder/
    now=$(date +"%Y-%m-%d")
     
    # archivage
    zip -r "$dest$share-$now.zip" "$src$share"
     
    # nombre d'archives
    find "$dest" -maxdepth 1 -type f | wc -l
    Par contre pour le reste, je ne sais pas trop vers quoi me diriger...
    Pourriez-vous m'aiguiller un peu SVP ?
    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    une solution très simple de roulement

    c'est un volume ou un fichier horodaté avec la sauvegarde dedans,
    en cas de succès virer la plus ancienne en calculant sans date. (ne pas oublier de gerer les années bisextiles !!! ainsi que les sauts d'années)

    il te manque en gros la recherche des backups anciens à virer, avec le calcul de date et tu fais derrière un find /chemin/vers/les/sauvegardes/ -type f -name *.zip -mtime +5 -exec rm -rf{} \; le mieux étant de mettre en dur le nom du volume/fichier en variable pour le -name et idem pour l'indicateur mtime.

    pour gerer tes problèmes de planning un marqueur dans le nom de fichier

    toto.$DATE.TRIM.zip toto.$DATE.ANNUEL.zip etc.... par exemple peut tout à fait suffir. pour identifier ce qui peut et surtout quand ça doit être épuré.

    j'avais une fonction en awk dans un coin pour calculer ce genre de truc.. je l'ai pas retrouvé ... mais c'était qu'un calcul calendaire de toute façon donc c'est refaisable...

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Bonjour

    C'est ce que j'ai fait pour mes sauvegardes Postgres. J'ai géré la périodicité grace au nom que je donne à mon fichier.
    • Si je demande une sauvegarde journalière, le fichier se nommera nomBdd.day.yyyy_quantieme.sql.
    • Si je demande une sauvegarde hebdomadaire, le fichier se nommera nomBdd.week.yyyy_noSem.sql.
    • Si je demande une sauvegarde mensuelle, le fichier se nommera nomBdd.month.yyyy_noMois.sql.
    • Si je demande une sauvegarde annuelle, le fichier se nommera nomBdd.year.yyyy.sql.

    C'est vrai, j'ai pas pensé au trimestre mais c'est facile à faire en prenant la partie entière de la division du mois courant par 3...

    Ensuite suffit de supprimer les fichiers les plus vieux de chaque catégorie...

  4. #4
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Bonjour à tous,

    je suis pas sûr de bien comprendre votre système de nommage des archives... le nommage est effectivement utile "pour l'homme" avec TRIM... ANNUEL... mais du coup on perd la notion de roulement !??
    Le roulement permet par exemple de remplacer (après J+365) l'archive annuelle par la plus ancienne archive trimestrielle.
    Et du coup, il faut également "déplacer" la plus ancienne archive hebdomadaire en trimestrielle..
    Du moins je voyais cela comme ça.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # fichiers annuelles
    find . -type f -daystart -mtime +365 -ls
     
    # Mais je parviens pas à lister les fichiers entre 2 dates...
    find . -type f -daystart -mtime +1 -mtime -1 -ls

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tchupacabra Voir le message
    je suis pas sûr de bien comprendre votre système de nommage des archives... le nommage est effectivement utile "pour l'homme" avec TRIM... ANNUEL... mais du coup on perd la notion de roulement !??
    Chez-nous, le roulement se fait à la main. Suffit de lister le dossier d'archive (grâce aux noms c'est trié par catégories et par date) puis supprimer ceux du bas de la liste.

    Citation Envoyé par Tchupacabra Voir le message
    Et du coup, il faut également "déplacer" la plus ancienne archive hebdomadaire en trimestrielle..
    Non, je ne m'embête pas à changer une archive de catégorie. C'est lors de l'appel de mon programme d'archivage, en fonction de l'option passée, qu'il crée une archive d'une catégorie ou d'une autre. Si j'appelle mon programme avec l'option "-mh" alors il fera deux sauvegardes successives de la même bdd, la premiere ayant un nom en ".month" (mensuelle) et la second un nom en ".week" (hebdomadaire). Si la semaine suivante je relance une sauvegarde avec les mêmes options, alors il écrasera la mensuelle (puisqu'on est dans le même mois) mais il me créera une nouvelle hebdomadaire et j'aurais alors dans mon dossier deux archives en ".week" et une en ".month".
    Ensuite si je ne veux garder que les mensuelles, je supprime toutes les ".week" et inversement je supprime les ".month" si je ne veux que les hebdomadaires.
    Citation Envoyé par Tchupacabra Voir le message
    # Mais je parviens pas à lister les fichiers entre 2 dates...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f -daystart -mtime +1 -mtime -1 -ls
    Ben si, ça marche... mais faut que tu joues avec les "+x" et "-y" pour cibler tes deux dates. Là tu demandes les fichiers ayant été modifiés à la fois il y a moins de 1 jour et à la fois il y a plus de 1 jour. Normal que tu n'aies rien !!!

  6. #6
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    le roulement soit au script, soit à la main peut importe mais basé sur le nom de l'archive pour pouvoir garantir de toujours identifier la bonne quelque soit la personne qui réalise l'action même si c'est pas celle qui a construit/organiser le truc à la base... c'est ça l'idée...

    le second intérêt est comme Sve@r le dit la souplesse de décalage/copie/modification si on veut migrer la 4ieme trimestrielle en annuel ou la copier comme annuelle pour libérer du temps d'accès disque.... là encore aucune possibilité d'erreur puisque les fichiers sont horodatés & typés.

  7. #7
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    ok. Merci Sve@r et frp31 pour vos commentaires !
    Je vais essayer de pondre un truc rapidement. Par contre, la donne a quelques peut changé car maintenant il faut garder des backups mensuels à la place des trimestrielles...

    Je reviens dès que mon script est "montrable"...

  8. #8
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Bonjour à tous,

    j'ai avancé dans mon script... mais je butte sur 2 problèmes :

    1/ après plusieurs heures de triture de cerveau, j'ai détecté un souci avec l'utilisation des nombres octals. En effet, quand je récupères le numéro du mois d'une archive à partir de son nom, je peux obtenir 01 à 12. Dans mon script j'ai besoin de soustraire 1 à ce numéro... mais ça coince avec 08 et 09.
    J'ai essayé pleins de truc mais rien ne marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    now="2014-09-03"
    m=10#(${now:5:2})
    m=10#${now:5:2}
    m=$((ibase=10:m))
    m="obase=8;$m" | bc
    m="ibase=8; $m" | bc
    2/ ensuite, quand j'ai calculé le numéro du mois précédent (et année car si date ="2014-01-16", le mois précédent est "2012-12").
    Je ne parviens pas déterminer avec find l'archive du mois précédent à "retagger" en M (pour archive mensuelle).
    Pour le moment, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$dest" -name "$folder-H-$a-$m-0*" -type f -exec ls {} \;
    mais je peux en à 2 et non trié...

    HELP ...

  9. #9
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 269
    Points : 13 533
    Points
    13 533
    Par défaut
    Bonjour,

    1. Pourquoi parles-tu d'octal? Ni 8 ni 9 n'existent dans le système octal.
      En plus, il me semble que c'est le c qui interprète les nombres commençant par 0 comme un nombre octal. Pas bash.

      Enfin, pour ton changement de base, il manque $(()):
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      $ echo "$((10#${now:5:2}))"
      9
    2. Pourquoi ne pas utiliser '1 month ago' de la commande date ?
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      $ date -d"2014-10-01 1 month ago"
      lun.  1 sept. 2014 00:00:00

  10. #10
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Bonjour Flodelarab,

    1/ cela pose problème lorsque je décrémente (--) ma variable $m pour obtenir le numéro du mois précédent avec :
    Je vais essayer ton code...

    2/ parce que mon archive n'a pas forcément été créé le premier jour du mois... car le script s'exécute tous les dimanche.

    3/ recherche (qui fonctionne) de l'archive H du mois précédent à retagger en M
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$dest" -type f -name "$folder-H-$a-$m-*" | sort -r | tail -1
    4/ comment remplacer le -H- dans le nom du fichier par -M- ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$dest" -type f -name "$folder-H-$a-$m-*" -exec mv -v "{}" `echo "{}" | sed 's/-H-/-M-/g'` \;
    ne fonctionne pas...

    Merci d'avance !

  11. #11
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    4/ problème résolu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo " -----------> L'archive hebdomadaire $a-$m devient mensuelle"
    archive_h="`find "$dest" -type f -name "$folder-H-$a-$m-*" | sort -r | tail -1`"
    archive_m="`echo $archive_h | sed 's/-H-/-M-/'`"
    mv "$archive_h" "$archive_m"
    5/ Maintenant... comment supprimer toutes les archives H à l'exception des 5 dernières ?
    Voici ce que j'ai pour l'instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$dest" -type f -name "$folder-H-*" | sort -r

  12. #12
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 269
    Points : 13 533
    Points
    13 533
    Par défaut
    5/ Tu vas pas le croire : de la même façon qu'il existe 'tail' pour la fin, il existe 'head' pour le début ! Magique !

  13. #13
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    5/ Tu vas pas le croire : de la même façon qu'il existe 'tail' pour la fin, il existe 'head' pour le début ! Magique !
    Avec mon jeu d'archives tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo "Archives hebdomadaires :"
     find "$dest" -type f -name "$folder-H-*"
     
    echo "Archives hebdomadaires triées :"
     find "$dest" -type f -name "$folder-H-*" | sort -r
     
    echo "Archives hebdomadaires à supprimer :"
     find "$dest" -type f -name "$folder-H-*" | sort -r | head -n -5
    Archives hebdomadaires :
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-02-12.zip
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-01-22.zip
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-01-08.zip
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-01-29.zip
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-01-15.zip
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-02-05.zip

    Archives hebdomadaires triées :
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-02-12.zip
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-02-05.zip
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-01-29.zip
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-01-22.zip
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-01-15.zip
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-01-08.zip

    Archives hebdomadaires à supprimer :
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-02-12.zip
    alors que l'archive à réellement supprimer est
    /home/XXX/BackupsNAS/monDossier/monDossier-H-2014-01-08.zip

    ... sur toutes les archives hebdomadaires, je souhaite garder les 5 plus récentes.


  14. #14
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 269
    Points : 13 533
    Points
    13 533
    Par défaut
    Hum. Tu demandes l'effacement "à l'exception des 5 dernières", je te donne l'effacement "à l'exception des 5 dernières".
    Maintenant, si tu veux trier dans l'autre sens, utilise sort au lieu de sort -r.
    Enfin, si tu ne veux pas changer ton tri mais la suppression, il suffit de faire la technique miroir (supprimer les archives après la 5ème ligne)

  15. #15
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    oups... pardon
    effectivement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$dest" -type f -name "$folder-H-*" | sort | head -n -5| xargs rm -f
    ça fonctionne.

  16. #16
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Bonjour à tous...
    je reviens vers vous car le code suivant ne fonctionne pas sous QNAP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$dest" -type f -name "$folder-H-*" | sort | head -n -5 | xargs rm -f -v
    Les erreurs :
    BusyBox v1.01 (2014.06.11-16:39+0000) multi-call binary

    Usage: find [PATH...] [EXPRESSION]

    Search for files in a directory hierarchy. The default PATH is
    the current directory; default EXPRESSION is '-print'

    EXPRESSION may consist of:
    -follow Dereference symbolic links.
    -name PATTERN File name (leading directories removed) matches PATTERN.
    -print Print (default and assumed).

    -type X Filetype matches X (where X is one of: f,d,l,b,c,...)
    -perm PERMS Permissions match any of (+NNN); all of (-NNN);
    or exactly (NNN)
    -mtime TIME Modified time is greater than (+N); less than (-N);
    or exactly (N) days
    BusyBox v1.01 (2014.06.11-16:39+0000) multi-call binary

    Usage: head [OPTION]... [FILE]...

    Print first 10 lines of each FILE to standard output.
    With more than one FILE, precede each with a header giving the
    file name. With no FILE, or when FILE is -, read standard input.

    Options:
    -n NUM Print first NUM lines instead of first 10

    rm: invalid option -- v
    BusyBox v1.01 (2014.06.11-16:39+0000) multi-call binary

    Usage: rm [OPTION]... FILE...

    Remove (unlink) the FILE(s). You may use '--' to
    indicate that all following arguments are non-options.

    Options:
    -i always prompt before removing each destination
    -f remove existing destinations, never prompt
    -r or -R remove the contents of directories recursively
    J'ai l'impression d'une erreur de pipe mais ne vois pas quoi faire...
    Merci d'avance !

  17. #17
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 269
    Points : 13 533
    Points
    13 533
    Par défaut
    Le pipe évite les fichiers temporaires. Pour tenter de cerner le soucis, utilise des fichiers temporaires pour rédiriger entrées et sorties.
    Pour l'instant, je ne vois pas de problème de la BusyBox qui aurait moins d'options qu'un interpréteur complet.

  18. #18
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tchupacabra Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$dest" -type f -name "$folder-H-*" | sort | head -n -5 | xargs rm -f -v
    J'ai l'impression d'une erreur de pipe
    C'est quoi une "erreur de pipe" ???

    Citation Envoyé par Tchupacabra Voir le message
    Les erreurs :
    rm: invalid option -- v
    Usage: rm [OPTION]... FILE...

    Options:
    -i always prompt before removing each destination
    -f remove existing destinations, never prompt
    -r or -R remove the contents of directories recursively
    mais ne vois pas quoi faire...
    Ben c'est pourtant bien explicité !!! Ton rm n'accepte pas l'option "-v" !!! Les options autorisées sont "-i", "-f" ou "-r"

    Et la prochaine fois, comme le dis Flodelarab, pense à tester chaque commande individuellement.

Discussions similaires

  1. Archivage automatique avec Excel
    Par phoque.r dans le forum Excel
    Réponses: 6
    Dernier message: 26/04/2007, 07h26
  2. Charger un module automatiquement avec des options debian
    Par ZiMo dans le forum Administration système
    Réponses: 4
    Dernier message: 22/12/2005, 14h22
  3. Numéro automatique avec PostgreSql
    Par BRAUKRIS dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 09/09/2005, 22h55
  4. Envoi de mail automatique avec Visual C++
    Par cza dans le forum MFC
    Réponses: 2
    Dernier message: 22/02/2005, 15h59
  5. Démarrage automatique avec xfce
    Par lunatix dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 21/09/2004, 22h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo