Comment puis-je réduire un nom de fichier plutôt qu'un numéro d'inode?


11

J'ai un logiciel qui fait tourner ses fichiers journaux au redémarrage. Cependant, pendant le développement, je le redémarre beaucoup, donc je voudrais surveiller le dernier fichier journal à tout moment.

Si je commence lessnormalement par less program.loget appuie sur Shift+ fà la fin, lorsque le fichier journal est tourné, je continue à surveiller l'ancien fichier journal. Je suppose que c'est parce que le numéro d'inode reste le même et lessa un descripteur de fichier ouvert pour cet inode.

Est-il possible de surveiller la dernière activité sur le fichier journal actuellement appelé program.log?

Plus précisément, je travaille sur Sun OS, donc une solution qui fonctionne là-bas serait idéale.


peut tail -F program.log | lessfonctionner
sendmoreinfo

tail -f program.log avez-vous essayé cela?
Rahul Patil

Réponses:


17

À utiliser less --follow-namesi votre version de le lessprend en charge. Cette option a été introduite dans la version 416.


Excellente réponse. Solaris 10 et Solaris 11 utilisent moins la version 436, cette option est donc effectivement disponible.
unixhacker2010

5

L' lessoption --follow-namen'est qu'une partie de la solution;
Pour remplacer tail -F, un autre argument est nécessaire:

less --follow-name +F file.log

L'option seule comme less --follow-name file.logne démarre pas réellement après les mises à jour du fichier. Vous devez entrer dans le mode de suivi en appuyant sur ShiftF.
(Quittez le mode pour naviguer ControlC.)

Au lieu de suivre le fichier, --follow-name modifie le comportement de less.
Il fait la touche de commande à l' ShiftFintérieur de lesssuivre en fonction du nom de fichier, pas du descripteur de fichier.

De plus, il n'y a pas d'option normale pour démarrer lessen mode suivi.
Mais vous pouvez utiliser la ligne de commande pour donner des touches à exécuter après le démarrage, en les préfixant avec +.
La combinaison de l'option de modification avec +F, lessdémarrera en fait dans le mode de suivi (modifié).

Utiliser +Fseul pour l'équivalent de plain tail -f:

less +F file.log

1

Je viens de trouver la réponse dans ce Q&R U&L intitulé: Comment faire un tail -ffichier de rotation de journal? .

En utilisant tail:

(si l'installation de GNU tail sur votre système est une option)

tail -F program.log

Depuis la page de manuel de tail :

   -f,      --follow[={name|descriptor}]
            output appended data as the file grows; -f, 
            --follow, and --follow=descriptor are equivalent

   -F       same as --follow=name --retry

   --retry  keep  trying  to  open  a  file even when it is or becomes
            inaccessible; useful when following by name, i.e., with
            --follow=name

La clé est l' --retryinterrupteur. Cela indique à la tailcommande de continuer à réessayer de suivre un fichier par son nom. Le -Fcommutateur fait à la fois a -fet a --retry.

En utilisant less

Comme @StephaneChazela l'a souligné dans les commentaires, ce qui suit ne fonctionnera pas.

tail -F program.log | less

La seule autre option que vous avez est d'utiliser moins directement en supposant qu'il prend directement en charge le --follow-namecommutateur et lessle fichier, sans utiliser tailcomplètement.

less --follow-name program.log

Je n'aime pas vraiment Sun OS parfois ...
Alex Chamberlain

Je suis d'accord, j'ai travaillé pendant des années, cela vous rend fou que l'outillage a 10 ans pour certaines applications. Ça n'a aucun sens. Ce site a été inestimable pour garder votre raison sur Solaris: sunfreeware.com/introduction.html
slm

si vous voulez plus de raison, consultez pkgsrc.org :)
sendmoreinfo

Ça ne marchera pas bien. Parce que lessva se bloquer si vous faites "G" pr "F". Que vous pouvez interrompre en faisant "Ctrl-C", mais cela tue la queue. Vous pouvez ensuite immuniser la queue vers Ctrl-C, mais ce n'est toujours pas très utilisable.
Stéphane Chazelas

En ce qui concerne GNU tail: consultez ceci pour plus d'informations sur les outils qui devraient être disponibles sur n'importe quel hôte Solaris. (En fait, GNU tail est là par défaut dans Solaris 11). Les administrateurs système Solaris compliquent souvent la tâche de leurs utilisateurs car ils laissent l'installation à l'installation très simple, tandis que les outils GNU pour Solaris sont actuellement disponibles directement auprès d'Oracle ou, dans certains cas, font partie de l'installation par défaut. Aucune raison de ne pas l'intégrer à votre installation. Aucune raison d'aller à des repos «non officiels». Voir lien.
unixhacker2010
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.