[CLI Wiki] page changée : filtres:tail

noreply at asyd.net noreply at asyd.net
Fri Oct 27 10:21:50 CEST 2006


Une page dans votre Wiki a été ajoutée ou modifiée. Voici les 
détails :

Date              : 2006/10/27 10:21
Navigateur        : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.0.7) Gecko/20060830 Firefox/1.5.0.7 (Debian-1.5.dfsg+1.5.0.7-2)
Adresse IP        : 195.5.211.234
Nom d'hôte        : aragorn.arseo.com
Ancienne révision : http://cli.asyd.net/home/filtres/tail?rev=1161899391
Nouvelle révision : http://cli.asyd.net/home/filtres/tail
Résumé            : 
Utilisateur       : kwisatz

@@ -7,4 +7,19 @@
  ^ Afficher les xx dernières lignes | tail -n xx mon_fichier |
  ^ Regarder ce qui s'écrit dans un fichier (genre log) au fur et à mesure qu'on écrit dedans | tail -f monfichier |
  
  A vous de jouer !
+ 
+ ===== Pour aller plus loin =====
+ 
+ tail -f est gourmand.
+ 
+ ILa seule manière de savoir si un fichier a changé, c'est de regarder à intervalles définis. Donc toutes les secondes, que le fichier ait changé ou pas, tail -f va regarder si le pointeur est à la fin du fichier, et si non, afficher jusque la fin du fichier, puis se mettre en sleep pendant une seconde, etc.
+ 
+ C'est inefficace donc, puisque une seconde (au maximum) de délai est observée (et parfois c'est pénible).
+ 
+ La solution : utiliser la fonctionnalité inotify des kernels 2.6 récents (TODO: préciser la version exacte). Cette fonctionnalité permet à un programme userland (par opposition au kernel lui-même), d'être informé en cas de changement sur un fichier qu'il surveille. Le programme informe le kernel qu'il veut être informé en cas de syscall sur l'inode qu'il surveille, et paf, il peut d'un coup dormir 12s et être réveillé au moment précis où une ligne est ajoutée au fichier.
+ 
+ inotail (apt-get install inotail pour les debianeux), http://distanz.ch/inotail, duplique grosso-modo le fonctionnement de tail (et de son option -f qui nous intéresse ici), en utilisant inotify.
+ 
+ 
+ Autre remarque : Quand vous surveillez un fichier longtemps (par exemple 24h), il se peut que logrotate soit passé par là, ait renommé votre fichier syslog en syslog.0, et que tail -f soit en train de surveiller un fichier d'archive (pour être précis, tail -f surveille un inode, et quand on renomme un fichier, l'inode ne change pas). La solution est d'utiliser l'option --follow=name, qui dit à tail de vérifier toutes les secondes que l'inode correspondant au nom suivi n'a pas changé, et si c'est le cas, il réouvre le fichier.



-- 
Ce message a été généré par DokuWiki
http://cli.asyd.net/home/



More information about the Shell mailing list