Alternative pour “tail -f” qui suit le nom de fichier

59

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, le déplace tool.log.<date>et en commence un nouveau tool.log.

Je suis en tail -f tool.logtrain d’exécuter une tâche sur la machine pour surveiller les journaux, mais à minuit, lorsqu’il tool.logest renommé tool.log.<date>, tailcontinue de regarder le fichier renommé.

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

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

Hugh
la source

Réponses:

90

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

-F
pareil que --follow=name --retry

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

--retry
continue d'essayer d'ouvrir un fichier même s'il est ou devient inaccessible; utile pour suivre son 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-Fcomme décrit ci-dessus
  • Mac OS X , FreeBSD et NetBSD - ont une-Foptionsimilaireavec le même effet
  • OpenBSD --fest suffisant (si le fichier est remplacé (c'est-à-dire que le numéro d'inode change), tail le rouvrira et continuera)
  • Solaris - pas d'équivalent
  • Busybox --Fest disponible dans les versions récentes, mais doit être compilé avecENABLE_FEATURE_FANCY_TAIL(ce n'est pas compilé par défaut)
Toby Speight
la source
55

L'alternative est la tail -Fcommande.

L' -Foption implique --follow=nameavec l' --retryoption, si la queue regarde votre dossier , même s'il a été supprimé et créé à nouveau.

Oleg Bolden
la source
5

Depuis que vous avez demandé une alternative :

L' lessutilitaire pourrait être une alternative pour tail -F.

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

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

VL-80
la source
Merci. J'étais seulement après une alternative parce que je n'étais pas au courant de la queue -F. Toujours bon de connaître les options bien.
Hugh
4

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

watch -n2 "tail tool.log"

Utilisez Ctrl+ Cpour quitter la commande lorsque vous avez terminé d’afficher le journal.

Arronique
la source
1
Cela semble créer beaucoup de messages en double si le journal défile plus lentement que le minuteur d'actualisation et rater des messages s'il défile plus rapidement.
Bobson
3
Watch prend tout l’écran pour ne pas dupliquer les messages, mais supprime la possibilité de revenir en arrière.
Hugh
3

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

Vous pouvez également le diriger 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.

Wayne Werner
la source
J'ai constaté qu'il ne gère pas les journaux pivotés tronqués et / ou renommés (je ne sais pas ce qui le perturbe dans mon cas particulier), de sorte que les journaux semblent s'arrêter à minuit, à moins que je ne redémarre lnav. Me manque-t-il un changement évident ou une technique pour cela? Je me demande alors que cela semble être quelque chose qu'il devrait prendre dans ses pas?
Stuart Hickinbottom
Cela dépend de la façon dont le fichier est tronqué. Si vous passez l' -rindicateur à lnav, il rechargera le nom du fichier (et chargera les journaux précédemment convertis)
Wayne Werner
1

Je ne suis pas sûr de pouvoir multitailgérer votre cas spécifique, mais je parie que c'est le cas. multitail fait à peu près tout ce que vous pourriez vouloir tailfaire.

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

Andy Lester
la source
1
Oui ça va - multitail -f <name1> -f <name2> -f <name3> .... Cet exemple montre plusieurs fichiers suivants simultanément, qui seront montrés dans des fenêtres séparées.
Stuart Hickinbottom