Como faço para menos um nome de arquivo do que um número de inode?

10

Eu tenho um software que gira seus arquivos de log quando ele é reiniciado. No entanto, durante o desenvolvimento, estou reiniciando muito, portanto, gostaria de monitorar o arquivo de log mais recente a qualquer momento.

Se eu iniciar less normalmente - less program.log - e pressionar Shift-f para finalizar, quando o arquivo de log for girado, continuarei monitorando o arquivo de log antigo. Eu suponho que isso é porque o número do inode permanece o mesmo e less tem um identificador de arquivo aberto para esse inode.

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

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

    
por Alex Chamberlain 01.05.2013 / 09:42

3 respostas

15

Use less --follow-name se sua versão de less for compatível. Essa opção foi introduzida na versão 416.

    
por 01.05.2013 / 11:50
4

A less option --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 dos arquivos. Você precisa entrar no modo de seguir pressionando Shift F .
(Saia do modo para navegar por Control C .)

Em vez de seguir o arquivo, --follow-name modifica o comportamento de menos.
Ele faz com que a tecla de comando Shift F dentro de less siga com base no nome do arquivo, não no descritor de arquivo.

Além disso, não há opção normal para iniciar less no modo de acompanhamento.
Mas você pode usar a linha de comando para dar pressionamentos de teclas para executar após a inicialização, prefixando-os com + .
Combinando a opção de modificador com +F , less será realmente iniciado no modo de acompanhamento (modificado).

Use +F sozinho para o equivalente a% normaltail -f:

less +F file.log
    
por 15.04.2015 / 12:36
1

Acabei de encontrar a resposta nesta lista de perguntas e respostas intitulada: Como fazer um tail -f de arquivos de log rotacionados? .

Usando tail :

(se instalar o GNU cauda no seu sistema é uma opção)

tail -F program.log

Na página de acompanhamento: :

   -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 chave --retry . Isso informa ao comando tail para continuar tentando seguir um arquivo pelo nome. A opção -F faz um -f e um --retry .

Usando less

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

tail -F program.log | less

A única outra opção que você tem é usar menos diretamente supondo que ele suporta a opção --follow-name e less o arquivo diretamente, renunciando usando tail completamente.

less --follow-name program.log
    
por 01.05.2013 / 10:26