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 :

script de purge


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Par défaut script de purge
    Voila je fais un script de purge de log lorsqu'ils ont plus de 30 jours :
    #!/bin/sh
    #
    if find /appli/apache/*/logs/* -mtime +30 -type f | wc -l; then
    find /appli/apache/*/logs/* -mtime +30 -type f | xargs rm
    echo "succes de la purge" > ./purge.log
    exit 0
    else
    echo "Il n y a pas de fichier de log de plus de 30 jours" > purge.log
    exit 0
    fi
    Je pensais qu'une fois trouvé la ligne
    find /appli/apache/*/logs/* -mtime +30 -type f | xargs rm
    j'avais fait le plus dur étant donné l'ancienneté de mes connaissances dans le domaine du script shell. Mais il m'apparait une erreur dans le cas où il n'y a pas de fichier de log a purger. Je pensais qu'il passerai dans le else mais en fait il reste dans la premiere alternative alors que le retour est bien 0. Quelqu'un aurait il une explication, voir une solution?

  2. #2
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    wc retourne certainement 0 pour dire qu'il n'y a pas d'erreur non ?
    Il faudrait plutot évaluer la chaine que wc retourne sur stdout ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cmd = 'find /appli/apache/*/logs/* -mtime +30 -type f | wc -l'
    if ["x$cmd" = "x" ] then
    else
    fi

  3. #3
    Expert confirmé 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 : 48
    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
    Par défaut
    la methode n'est pas terrible car pour une raison X ou Y un des code retour peut se perdre en route que ce soit dans le pipe ou dans le xargs ou meme dans le rm ou encore dans le find
    donc
    ni l'un ni l'autre il faut voir le code retour de find qui lui meme reçoit et analyse le code retour de rm ce qui permet de n'avoir qu'un seul et unique code retour de bout en bout jusqu'à la fin de l'execution du find dans lequel est imbriqué le rm

    ce qui donne en clair par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    find . -type f -name "*.Truc" -mtime +31 -exec rm {} \; 
    if [ $? -ne 0 ]; then
      echo "********ZUT CA FOIRE***********"
      exit $?
    else
      echo ok
      exit 0
    fi

  4. #4
    Membre chevronné Avatar de srvremi
    Homme Profil pro
    Directeur d'école d'ingénieurs
    Inscrit en
    Mars 2002
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur d'école d'ingénieurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 554
    Par défaut
    Salut.

    Parfaitement d'accord avec frp31, il faut faire attention à ce que les codes de retour ne se perdent pas en route.

    @+
    Rémi

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Par défaut
    Merci pour votre aide mais il me reste des soucis :
    1) -exec rm {} ne fonctionne pas, j'ai pour erreur :find: Paramètre manquant pour « -exec ». Ce soucis est pallié pour l'instant par l'utilisation de | xargs rm après le find

    2) Mon but est de gérer les codes retour mais avant tout de récupérer la sortie de wc -l afin de savoir si je lance la commande rm derrière (en fait s'il n'y a aucun fichier à supprimer, j'obtiens un message d'erreur "il manque une opérande à la commande rm", normal j'appel rm sans argument). Pour éviter cette erreur affiché je compte d'abord les fichiers à effacer :
    find /appli/*/data/logs/* -mtime +30 -type f | wc -l;
    ça s'est bon, toutefois ma condition n'est pas bonne ensuite :
    if [ $? -ne 0 ]; then
    echo "$val = "+ $?
    find /appli/*/data/logs/* -mtime +33 -type f | xargs rm
    echo "`date "+%d/%m/%y %H:%M"` succes de la purge" >> purge.log
    exit 0
    else
    echo $?
    echo "`date "+%d/%m/%y %H:%M"` Il n y a pas de fichier de log de plus de 30 jours" >> purge.log
    exit 0
    fi
    passe dans l'alternative avec $?=1 dans tous les cas, qu'il y ai ou non des fichiers à suppimer je suppose donc que ce 1 est le code retour d'autre chose (peut etre echo ou le else). Quelqu'un aurait une petite idée de mes erreurs?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Par défaut
    Finalement la réponse de frp31 était la bonne, je n'ai pas compris la diff entre mon execution d'hier et celle d'aujourd'hui. Globalement mon utilisation du find n'était pas tres esthétique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /appli/*/data/logs/* -mtime +33 -type f | xargs rm
    j'ai pris en compte aujourd'hui après relecture en jours ouvré de la réponse de frp31(c'est peut etre ça la diff )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /appli/*/data/logs/ -type f -name "*.*" -mtime +31 -exec rm {} \;
    ici je sépare bien le chemin du type de fichier cherché et tout passe bien. Ensuite controle du code de retour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if [ $? -ne 0 ]; then
      echo "`date "+%d/%m/%y %H:%M"` echec de la purge code de retour : $?" >> purge.log
      exit $?
    else
      echo "`date "+%d/%m/%y %H:%M"` succes de la purge " >> purge.log
      exit 0
    fi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script de purge sous linux
    Par shake.norris dans le forum Shell et commandes GNU
    Réponses: 33
    Dernier message: 07/02/2013, 13h50
  2. Comment tester mon script de purge
    Par PAB/31/SAB dans le forum VBScript
    Réponses: 0
    Dernier message: 01/06/2011, 17h24
  3. Script shell purge fichiers
    Par jicaygg dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 02/02/2011, 15h25
  4. Rman -06429 et SCRIPT DE PURGE
    Par ag_77 dans le forum Recovery Manager
    Réponses: 3
    Dernier message: 03/10/2007, 12h58
  5. Script MSDOS de purge de fichier
    Par tilb dans le forum Windows
    Réponses: 1
    Dernier message: 12/01/2006, 13h12

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