Como menos um nome de arquivo em vez de um número de inode?


11

Eu tenho um software que gira seus arquivos de log ao reiniciar. No entanto, durante o desenvolvimento, estou reiniciando muito, então gostaria de monitorar o arquivo de log mais recente a qualquer momento.

Se eu começar lessnormalmente com less program.loge pressionar Shift+ fna cauda, ​​quando o arquivo de log for girado, continuarei monitorando o arquivo de log antigo. Suponho que isso ocorre porque o número do inode permanece o mesmo e lesstem um identificador de arquivo aberto para esse inode.

É possível monitorar a atividade mais recente em qualquer arquivo de log atualmente chamado program.log?

Especificamente, estou trabalhando no Sun OS; portanto, uma solução que funcione lá seria o ideal.


talvez tail -F program.log | lessvai funcionar
sendmoreinfo

tail -f program.log você já tentou isso?
Rahul Patil

Respostas:


17

Use less --follow-namese sua versão lesssuportar. Essa opção foi introduzida na versão 416.


Excelente resposta. O Solaris 10 e o Solaris 11 usam menos a versão 436, portanto esta opção está realmente disponível.
unixhacker2010

5

A lessopção --follow-nameé apenas parte da solução;
Para substituir tail -F, outro argumento é necessário:

less --follow-name +F file.log

A opção sozinha como less --follow-name file.log, na verdade, não começa a seguir as atualizações do arquivo. Você precisa entrar no modo de seguir pressionando ShiftF.
(Saia do modo para navegar ControlC.)

Em vez de seguir o arquivo, --follow-name modifica o comportamento de less.
Torna a chave de comando ShiftFdentro do lessfollow com base no nome do arquivo, não no descritor do arquivo.

Além disso, não há opção normal para iniciar lessno modo de acompanhamento.
Mas você pode usar a linha de comando para fornecer pressionamentos de teclas a serem executados após a inicialização, prefixando-os com +.
Combinar a opção de modificador com +F, lessna verdade, iniciará no modo de acompanhamento (modificado).

Use +Fsozinho o equivalente a plain tail -f:

less +F file.log

1

Acabei de encontrar a resposta nesta sessão de perguntas e respostas da U&L intitulada: Como fazer um tail -farquivo de log rotacionado? .

Usando tail:

(se a instalação do GNU tail no seu sistema for uma opção)

tail -F program.log

Na página do manual da cauda :

   -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

A chave é a --retrychave. Isso informa ao tailcomando para continuar tentando seguir um arquivo pelo nome. O -Finterruptor faz a -fe a --retry.

Usando less

Como o @StephaneChazela apontou nos comentários, o seguinte não funcionará.

tail -F program.log | less

A única outra opção que você tem é usar menos diretamente, assumindo que ele suporta o --follow-nameswitch e lesso arquivo diretamente, deixando de usar tailcompletamente.

less --follow-name program.log

Eu não gosto fortemente Sun OS às vezes ...
Alex Chamberlain

Eu concordo, trabalhei por anos, isso deixa você louco porque o ferramental tem 10 anos para alguns dos aplicativos. Não faz sentido. Este site foi inestimável para manter sua sanidade mental no Solaris: sunfreeware.com/introduction.html
slm

se você quiser mais sanidade, confira pkgsrc.org :)
sendmoreinfo

Isso não vai funcionar bem. Porque lessirá travar se você fizer "G" pr "F". Que você pode interromper fazendo "Ctrl-C", mas depois mata a cauda. Em seguida, você pode imitar o Ctrl-C, mas ainda não é muito utilizável.
Stéphane Chazelas

Com relação ao GNU tail: Verifique isso para obter informações sobre quais ferramentas devem estar disponíveis em qualquer host Solaris. (Na verdade, o GNU tail existe por padrão no Solaris 11). Os administradores de sistema do Solaris geralmente tornam mais difícil para seus usuários, porque deixam a instalação na instalação básica, enquanto as ferramentas GNU para Solaris atualmente estão disponíveis atualmente diretamente do Oracle ou, em alguns casos, fazem parte da instalação padrão. Não há razão para não fazer parte da sua instalação. Não há razão para ir para repositórios 'não oficiais'. Veja o link.
unixhacker2010
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.