Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
HELP : Récupérez la dernière ligne d'une log à chaque nouvelle écriture...
Envoyé par: Looki

Bonjour,

Je souhaite pouvoir récupérer dans une variable la dernière ligne d'une log à chaque nouvelle écriture de cette dernière.
Ceci en shell bash.
J'ai essayé plusieur truc du style :
toto=`tail -n 1 -f $log`
mais je ne parviens pas à avoir ce que je souhaite.

Merci d'avance pour toute aide.

a+
;-)

Poste le Tuesday 21 June 2005 09:54:58
Répondre     Citer    
Re: HELP : Récupérez la dernière ligne d'une log à chaque nouvelle écriture...
Envoyé par: cancerus

Bonjour,

A moins que man tail ne m'est trompé, si tu veux la dernière ligne de ton log, c'est -n -1 qu'il faut utiliser.

A plus.

Poste le Tuesday 21 June 2005 11:22:26
Répondre     Citer    
Re: HELP : Récupérer la dernière ligne d’un log à chaque nouvelle écriture...
Envoyé par: nicola

Personnellement j’ai choisi une autre solution : j’ai ajouté une ligne *.* |/dev/alllog (qui est un tube nommé) dans /etc/syslog.cong, et ensuite j’affiche avec une boucle infinie cat /dev/alllog.

--
On ne prête qu’aux riches, et on a bien raison, parce que les autres remboursent difficilement.
-+- Tristan Bernard (1866-1947) -+-

Poste le Tuesday 21 June 2005 12:11:59
Répondre     Citer    
Re: HELP : Récupérez la dernière ligne d'une log à chaque nouvelle écriture...
Envoyé par: Looki

Citation
Looki
Bonjour,

Je souhaite pouvoir récupérer dans une variable la
dernière ligne d'une log à chaque nouvelle
écriture de cette dernière.
Ceci en shell bash.
J'ai essayé plusieur truc du style :
toto=`tail -n 1 -f $log`
mais je ne parviens pas à avoir ce que je
souhaite.

Merci d'avance pour toute aide.

a+

le -f permet de lire chaque nouvelle ligne ajoutée.

Poste le Tuesday 21 June 2005 13:45:04
Répondre     Citer    
Re: HELP : Récupérer la dernière ligne d’un log à chaque nouvelle écriture...
Envoyé par: Looki

Citation
nicola
Personnellement j’ai choisi une autre solution :
j’ai ajouté une ligne *.* |/dev/alllog (qui est un
tube nommé) dans /etc/syslog.cong, et ensuite
j’affiche avec une boucle infinie cat /dev/alllog.

--
La seule excuse de Dieu est qu’il n’existe pas.
Stendhal

Mon problème est que la log n'est pas générée par un programme qui utilise syslog.... Et je n'ai pas trouvé comment ajouter un service dans syslog !

Poste le Tuesday 21 June 2005 15:00:59
Répondre     Citer    
Re: HELP : Récupérez la dernière ligne d'une log à chaque nouvelle écriture...
Envoyé par: cancerus

En fait, l'option -f conserve le tail ouvert.

C'est à dire que tant que tu ne le killes pas, le tail attend les infos et les affiche dès que le fichier est modifié. Le problème réside dans le fait que si tu mets ce genre d'option dans un shell, le dit shell va rester bloquer sur ta ligne toto=`tail -n 1 -f $log`.

le mieux serait peut être donc de faire un shell où tu bannis le '-f' mais qui va scanner ton fichier de log régulièrement (facilement réalisable via la crontab).
Ou alors, toujours en te passant de l'option '-f', tu fais une boucle infinie qui fait un tail de la dernière ligne et effectue le traitement de ta variable.

Sinon tu as la solution de Nicola.

Poste le Tuesday 21 June 2005 15:34:45
Répondre     Citer    
Re: HELP : Récupérez la dernière ligne d'une log à chaque nouvelle écriture...
Envoyé par: Looki

Citation
cancerus
En fait, l'option -f conserve le tail ouvert.

C'est à dire que tant que tu ne le killes pas, le
tail attend les infos et les affiche dès que le
fichier est modifié. Le problème réside dans le
fait que si tu mets ce genre d'option dans un
shell, le dit shell va rester bloquer sur ta ligne
toto=`tail -n 1 -f $log`.

le mieux serait peut être donc de faire un shell
où tu bannis le '-f' mais qui va scanner ton
fichier de log régulièrement (facilement
réalisable via la crontab).
Ou alors, toujours en te passant de l'option '-f',
tu fais une boucle infinie qui fait un tail de la
dernière ligne et effectue le traitement de ta
variable.

Sinon tu as la solution de Nicola.

Ok, je vais faire comme ça avec une boucle infinie et un tail sur la dernière ligne du fichier.
merci à tous

a+

Poste le Tuesday 21 June 2005 16:39:39
Répondre     Citer    
Re: HELP : Récupérez la dernière ligne d'une log à chaque nouvelle écriture...
Envoyé par: marc ferraton

tu peux aussi ouvrir ton fichier de log avec un tail puis tu envoies dans l'entrée standard de ton shell de traitement
tail -f fichier.log | tonshell.sh

avec qque chose comme çà pour ton traitement
exemple d'un traitement particulier de filtrage sur la derniere ligne avant une impression

--------------------------------
while [ 1 ]
do
        read -r -n 1  -t 3 char
        # time-out sur entrée standard
        if [ $? = 1 ]
        then 
                if [ -n "$chaine" ] 
                then
                        # on traite la partie de chaine reçue   
                        mode=`echo -n "$chaine" | ( exec 3>&1; gawk -v newline=0 -v mode=$mode -v equip=$file -v nbc
ol=$nbcol -v term=$terminal -f /usr/bin/${filter}.awk 2>&1 1>&3 3>&- | logger -p local0.err 3>&- 1>&2 )`
                        chaine=""
                fi
        else 
                # caractere null c'est la fin de ligne on imprime
                if [ -n "$char" ]
                then
                        chaine=$chaine$char
                else
                        mode=`echo "$chaine" | ( exec 3>&1; gawk -v newline=1 -v mode=$mode -v equip=$file -v nbcol=
$nbcol -v term=$terminal -f /usr/bin/${filter}.awk 2>&1 1>&3 3>&- | logger -p local0.err 3>&- 1>&2 ) `
                        chaine=""
                fi
        fi
done

Poste le Thursday 23 June 2005 22:56:10
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
HELP : Récupérez la dernière ligne d'une log à chaque nouvelle écriture...
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons