web-dev-qa-db-fra.com

Alternative pour "tail -f" qui suit le nom de fichier

Certains journaux sont générés à l'aide d'un enregistreur de fichiers rotatif chronométré. Cela enregistre dans un fichier appelé tool.log, et à minuit, déplace ceci vers tool.log.<date> et commence un nouveau tool.log.

J'ai un tail -f tool.log en cours d'exécution sur la machine pour surveiller les journaux, mais à minuit, lorsque tool.log est renommé en tool.log.<date>, tail continue de regarder le fichier renommé.

Ce que j'espère, c'est un outil similaire à tail, mais qui continuera à surveiller le fichier nommé tool.log, plutôt que de suivre l'inode.

Est-ce que quelque chose comme ça existe? Sinon, je peux écrire le mien en Python à cette fin.

59
Hugh

Certaines implémentations de tail ont une option pour cela; voici la description de la page de manuel de GNU tail:

-F
identique à --follow=name --retry

-f, --follow [= { nom | descripteur }]
affiche les données ajoutées à mesure que le fichier s'agrandit; -f, --follow et --follow=descriptor sont équivalents

--retry
continue d’essayer d’ouvrir un fichier même s’il est ou devient inaccessible; utile lorsque vous suivez par nom, c'est-à-dire avec --follow=name

Comme cette option n'est pas spécifiée par POSIX, vous ne pouvez pas en dépendre partout. Quelques implémentations connues:

  • GNU - a -F comme décrit ci-dessus
  • Mac OS X , FreeBSD et NetBSD - ont une option -F similaire avec le même effet
  • OpenBSD - -f suffit (si le fichier est remplacé (c'est-à-dire que le numéro d'inode change), tail va rouvrir le fichier et continuer)
  • Solaris - pas d'équivalent
  • Busybox - -F est disponible dans les versions récentes, mais doit être compilé avec ENABLE_FEATURE_FANCY_TAIL (il n'est pas compilé- par défaut)
90
Toby Speight

L'alternative est la commande tail -F.

L'option -F implique --follow=name avec l'option --retry, donc tail surveille votre fichier, même s'il a été supprimé et créé à nouveau.

55
Oleg Bolden

Depuis que vous avez demandé alternative:

L'utilitaire less pourrait constituer une alternative à tail -F.

Il devra être exécuté comme suit: less --follow-name filename.log et appuyez sur Shift + F.

Cela vous donnera les mêmes résultats que tail -F.

5
VL-80

Une autre alternative serait d'utiliser la commande watchname__, qui répétera n'importe quelle commande toutes les n secondes, toutes les 2 secondes dans cet exemple:

watch -n2 "tail tool.log"

Utilisation Ctrl+C pour quitter la commande lorsque vous avez terminé de consulter le journal.

4
Arronical

LNav est un autre outil fantastique qui suit le nom du fichier.

Vous pouvez également le pointer vers un répertoire et tous les fichiers de ce répertoire seront ajoutés à la liste, en plus de toutes sortes d’autres fonctionnalités intéressantes.

3
Wayne Werner

Je ne sais pas si multitail traitera votre cas particulier, mais je parie que c'est le cas. multitail fait à peu près tout ce que vous voudriez que tail fasse.

https://en.wikipedia.org/wiki/MultiTail

1
Andy Lester