Eu tenho um software que gira seus arquivos de log quando é reiniciado. No entanto, durante o desenvolvimento, estou reiniciando-o bastante, então gostaria de monitorar o arquivo de log mais recente a qualquer momento.
Se eu começar less
normalmente less program.log
e pressionar Shift+ faté o fim, quando o arquivo de log for girado, continuo monitorando o arquivo de log antigo. Presumo que isso ocorra porque o número do inode permanece o mesmo e less
possui um identificador de arquivo aberto para esse inode.
É possível monitorar a atividade mais recente em qualquer arquivo de log chamado atualmente program.log
?
Especificamente, estou trabalhando no Sun OS, então uma solução que funcione seria ideal.
Responder1
Use less --follow-name
se a sua versão for less
compatível.
Essa opção foi introduzida na versão 416.
Em seguida, execute um comando normal de acompanhamento Shift+Fem less
.
Responder2
A less
opção --follow-name
é apenas parte da solução;
Para substituir tail -F
, é necessário outro argumento:
less --follow-name +F file.log
A opção por si só less --follow-name file.log
não começa a seguir as atualizações do arquivo. Você precisa entrar no modo de acompanhamento pressionando ShiftF.
(Saia do modo para navegar por ControlC.)
Em vez de seguir o arquivo,--follow-name
modifica o comportamentoDe menos.
Ele faz com que a chave de comando ShiftFdentro do less
follow seja baseada no nome do arquivo, não no descritor do arquivo.
Além disso, não existe uma opção normal para iniciar less
no modo de acompanhamento.
Mas você pode usar a linha de comando para fornecerteclas para executarapós a inicialização, prefixando-os com +
.
Combinar a opção modificadora com +F
, less
na verdade iniciará no modo de acompanhamento (modificado).
Use +F
sozinho para o equivalente a plain tail -f
:
less +F file.log
Responder3
Acabei de encontrar a resposta nestas perguntas e respostas sobre U&L intituladas:Como fazer um tail -f
registro de arquivos girados?.
Usando tail
:
(se instalar GNU tail em seu sistema for uma opção)
tail -F program.log
-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 é o --retry
interruptor. Isso informa ao tail
comando para continuar tentando seguir um arquivo pelo nome. O -F
switch faz a -f
e a --retry
.
Usandoless
Como @StephaneChazela apontou nos comentários, o seguinte não funcionará.
tail -F program.log | less
A única outra opção que você tem é usar less diretamente, assumindo que ele suporta o --follow-name
switch e less
o arquivo diretamente, renunciando ao uso tail
completamente.
less --follow-name program.log