Shell rotatelog
Fermé
lawrenz23
Messages postés
33
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
1 août 2013
-
31 juil. 2013 à 11:46
Utilisateur anonyme - 1 août 2013 à 16:30
Utilisateur anonyme - 1 août 2013 à 16:30
A voir également:
- Shell rotatelog
- Classic shell windows 11 - Télécharger - Personnalisation
- Shell startup windows 10 - Guide
- Ssh secure shell download - Télécharger - Divers Web & Internet
- Efi shell version 2.50 - Forum Windows 10
- Shell infrastructure host c'est quoi ✓ - Forum Windows 10
5 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
31 juil. 2013 à 11:50
31 juil. 2013 à 11:50
Salut,
C'est pour ton apprentissage ? Parce que sinon, il existe déjà un programme tout en un qui fait ça : logrotate ;-)
C'est pour ton apprentissage ? Parce que sinon, il existe déjà un programme tout en un qui fait ça : logrotate ;-)
lawrenz23
Messages postés
33
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
1 août 2013
6
31 juil. 2013 à 11:52
31 juil. 2013 à 11:52
Salut,
C'est pour mon apprentissage je souhaite scripter.
Pourrai-tu m'aider ?
C'est pour mon apprentissage je souhaite scripter.
Pourrai-tu m'aider ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
31 juil. 2013 à 11:54
31 juil. 2013 à 11:54
Dans ce cas montres-nous ce que tu as déjà fait ou comment tu comptes t'y prendre et on t'aidera...
lawrenz23
Messages postés
33
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
1 août 2013
6
31 juil. 2013 à 12:14
31 juil. 2013 à 12:14
j'ai fait ceci mais je crois que c'est complètment à côté de la plaque:
(je me suis aider d'internet pour faire ceci )
date=$(date '+%Y.%m.%d-%H:%M:%S')
for i in 'find /var/log/messages ';do
num='/usr/sbin/fuser -u ${i} 2>/dev/null | awk '{print $1}' | wc -l'
if [ ${num} -gt 0 ]
then
echo "-----COPYING, GZIP'ing and MOVING open file ${i} to ${i}.${date}-----"
cp ${i} ${i}.${date} | gzip ${i}.${date} | mv $i.${date}.gz /var/log/archive
echo "-----zero out ${i}-----"
>${i}
else
echo "gzip'ing and moving ${i} to /var/log/messages"
mv ${i} ${i}.${date}
gzip ${i}.${date}
mv ${i}.${date}*.gz /var/log/archive
fi
done
(je me suis aider d'internet pour faire ceci )
date=$(date '+%Y.%m.%d-%H:%M:%S')
for i in 'find /var/log/messages ';do
num='/usr/sbin/fuser -u ${i} 2>/dev/null | awk '{print $1}' | wc -l'
if [ ${num} -gt 0 ]
then
echo "-----COPYING, GZIP'ing and MOVING open file ${i} to ${i}.${date}-----"
cp ${i} ${i}.${date} | gzip ${i}.${date} | mv $i.${date}.gz /var/log/archive
echo "-----zero out ${i}-----"
>${i}
else
echo "gzip'ing and moving ${i} to /var/log/messages"
mv ${i} ${i}.${date}
gzip ${i}.${date}
mv ${i}.${date}*.gz /var/log/archive
fi
done
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
31 juil. 2013 à 16:42
31 juil. 2013 à 16:42
Bon déjà, normalement /var/log/messages n'est pas un répertoire mais un fichier ;-\
Admettons que ce soit un répertoire contenant des fichiers, que vient faire la date là-dedans, dans la mesure où dans ton exemple (et dans le cas des logs) il n'y a pas de date dans leur nom ? ;-\
J'ai vu à quoi servait la date, mais ce n'est pas le but de ta demande ;-\
Admettons que ce soit un répertoire contenant des fichiers, que vient faire la date là-dedans, dans la mesure où dans ton exemple (et dans le cas des logs) il n'y a pas de date dans leur nom ? ;-\
J'ai vu à quoi servait la date, mais ce n'est pas le but de ta demande ;-\
lawrenz23
Messages postés
33
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
1 août 2013
6
31 juil. 2013 à 17:32
31 juil. 2013 à 17:32
Que me conseillerais-tu de faire s'il te plait ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
31 juil. 2013 à 17:41
31 juil. 2013 à 17:41
Te tenir dans un premier temps à ta demande initiale.
Ne pas sauter les étapes et y aller progressivement. Ton script mélange des histoires de dates, de compressions, de tests (fuser) et ça c'est le meilleur moyen de se perdre quand on débute.
Procède étape par étape. Ne mélange pas tout.
Essaie d'écrire un algorithme pour ce que tu penses devoir faire. Puis pose-le ici, des spécialistes devraient t'aider à l'affiner (pas moi malheureusement, je ne connais rien en algorithmie et je ne te serai pas d'un grand secours ;-( )
Après en partant de là, on écrira les commandes qui devraient aboutir à ta demande (faire une rotation des logs).
Ne pas sauter les étapes et y aller progressivement. Ton script mélange des histoires de dates, de compressions, de tests (fuser) et ça c'est le meilleur moyen de se perdre quand on débute.
Procède étape par étape. Ne mélange pas tout.
Essaie d'écrire un algorithme pour ce que tu penses devoir faire. Puis pose-le ici, des spécialistes devraient t'aider à l'affiner (pas moi malheureusement, je ne connais rien en algorithmie et je ne te serai pas d'un grand secours ;-( )
Après en partant de là, on écrira les commandes qui devraient aboutir à ta demande (faire une rotation des logs).
lawrenz23
Messages postés
33
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
1 août 2013
6
31 juil. 2013 à 18:01
31 juil. 2013 à 18:01
ok merci je vais essayer de faire un algo
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lawrenz23
Messages postés
33
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
1 août 2013
6
1 août 2013 à 11:57
1 août 2013 à 11:57
Salut,
j'ai fait ceci :
#!/bin/ksh
logfilesizecurrent='wc -l /var/log/messages | awk '{print $1}''
if [ "$logfilesizecurrent" -gt 2 ]
then
for i in 3 2 1; do
cat /var/log/messages > /var/log/messages.$((i+1)) && gzip /var/log/messages.$((i+1))
echo "" > /var/log/messages
done
else
echo " pas de rotation "
fi
j'ai fait ceci :
#!/bin/ksh
logfilesizecurrent='wc -l /var/log/messages | awk '{print $1}''
if [ "$logfilesizecurrent" -gt 2 ]
then
for i in 3 2 1; do
cat /var/log/messages > /var/log/messages.$((i+1)) && gzip /var/log/messages.$((i+1))
echo "" > /var/log/messages
done
else
echo " pas de rotation "
fi
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
1 août 2013 à 12:07
1 août 2013 à 12:07
Pourquoi comptes-tu les lignes du fichier /var/log/messages ?
De plus pas la peine d'utiliser "awk", wc -l < fichier renverra le résultat sans le nom dudit fichier.
J'ai du mal à comprendre le "echo "" > /var/log/messages" ???
Si tu vides ce fichier, à la seconde rotation 'cat /var/log/messages > /var/log/messages.$((i+1))' sera vide ;-(
Pour vider un fichier pas besoin de la commande "echo", un simple :
> fichier
suffit.
De plus pas la peine d'utiliser "awk", wc -l < fichier renverra le résultat sans le nom dudit fichier.
J'ai du mal à comprendre le "echo "" > /var/log/messages" ???
Si tu vides ce fichier, à la seconde rotation 'cat /var/log/messages > /var/log/messages.$((i+1))' sera vide ;-(
Pour vider un fichier pas besoin de la commande "echo", un simple :
> fichier
suffit.
lawrenz23
Messages postés
33
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
1 août 2013
6
1 août 2013 à 13:57
1 août 2013 à 13:57
j'ai corriger les fautes mais à la base je voulais partir de la taille du fichier mais je sais pas comment faire ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
1 août 2013 à 14:00
1 août 2013 à 14:00
stat est ton ami ;-)
lawrenz23
Messages postés
33
Date d'inscription
mardi 17 mai 2011
Statut
Membre
Dernière intervention
1 août 2013
6
1 août 2013 à 14:21
1 août 2013 à 14:21
Merci j'ai trouvé j'ai une autre question quand il fait cette rotation il me stock les informations du fichier log de base dans le fichier.4 alors que le fichier.1 fichier.2 et fichier.3 sont vides.
Es-ce que mon for est-il bon pour faire une rotation?
Es-ce que mon for est-il bon pour faire une rotation?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
1 août 2013 à 14:24
1 août 2013 à 14:24
Je t'avais pourtant prévenu [echo "" > /var/log/messa là] ;-((
J'ai du mal à comprendre le "echo "" > /var/log/messages" ???
Si tu vides ce fichier, à la seconde rotation 'cat /var/log/messages > /var/log/messages.$((i+1))' sera vide ;-(
J'ai du mal à comprendre le "echo "" > /var/log/messages" ???
Si tu vides ce fichier, à la seconde rotation 'cat /var/log/messages > /var/log/messages.$((i+1))' sera vide ;-(