Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/04/2008, 15h41   #1
Membre à l'essai
 
Inscription : août 2004
Messages : 79
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 79
Points : 23
Points : 23
Par défaut script de purge

Voila je fais un script de purge de log lorsqu'ils ont plus de 30 jours :
Citation:
#!/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?
jayjaypg22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 15h53   #2
Membre chevronné
 
Avatar de valefor
 
Inscription : décembre 2006
Messages : 689
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 689
Points : 666
Points : 666
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 :
1
2
3
4
cmd = 'find /appli/apache/*/logs/* -mtime +30 -type f | wc -l'
if ["x$cmd" = "x" ] then
else
fi
valefor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 16h06   #3
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 546
Points : 7 779
Points : 7 779
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 :
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
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2008, 15h06   #4
Membre éclairé
 
Avatar de srvremi
 
Inscription : mars 2002
Messages : 457
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 457
Points : 309
Points : 309
Salut.

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

@+
Rémi
srvremi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2008, 16h26   #5
Membre à l'essai
 
Inscription : août 2004
Messages : 79
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 79
Points : 23
Points : 23
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 :
Citation:
find /appli/*/data/logs/* -mtime +30 -type f | wc -l;
ça s'est bon, toutefois ma condition n'est pas bonne ensuite :
Citation:
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?
jayjaypg22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 10h10   #6
Membre à l'essai
 
Inscription : août 2004
Messages : 79
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 79
Points : 23
Points : 23
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 :
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 :
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 :
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
jayjaypg22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2008, 20h56   #7
Membre Expert
 
Inscription : octobre 2005
Messages : 1 403
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : octobre 2005
Messages : 1 403
Points : 1 600
Points : 1 600
Envoyer un message via MSN à iohack
Attention
Code :
1
2
3
4
 
if [ $? -ne 0 ]; then
  echo "`date "+%d/%m/%y %H:%M"` echec de la purge code de retour : $?" >> purge.log
  exit $?
va te retourné le return code de ta commande "echo".
-->
Code :
1
2
3
4
5
 
RC=$?
if [ ${RC} -ne 0 ]; then
  echo "`date "+%d/%m/%y %H:%M"` echec de la purge code de retour : ${RC}" >> purge.log
  exit ${RC}
iohack est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h05.


 
 
 
 
Partenaires

Hébergement Web