Eu tenho uma saída de terminal que gostaria que estivesse disponível para vários usuários
atualmente algo como:
command > /var/logs
para a entrada e:
watch tail -30 /var/logs
para os terminais de entrada.
no entanto, isso é indesejável porque assiste apenas às enquetes em vez de gerar quando há atualizações e o tail não permite a rolagem.
Responder1
Dois problemas que você coloca:
assista apenas às enquetes em vez de enviar quando houver atualizações
tail -f
não faz votação. A partir da versão 7.5 do GNU Coreutils, tail -f
utilizará a inotify
interface do kernel Linux para receber sinais do kernel indicando que o arquivo foi modificado. Se você não usa o GNU Coreutils ou usa uma versão anterior à 7.5 por algum motivo, ele pesquisará uma vez por segundo. Provavelmente também pesquisa sistemas operacionais POSIX não-Linux (BSD, Solaris, etc), mas você teria que pesquisá-lo caso a caso: alguns desses sistemas operacionais usam GNU Coreutils, mas o kernel não suporta inotify
; alguns deles não usam GNU Coreutils para implementação tail
.
tail não permite scrollback
O less
comando foi projetado especificamente para armazenar dados em buffer stdin
(por exemplo, do tail
comando) e permitir que você role para frente e para trás. O buffer não é ilimitado, mas você pode usar opções de linha de comando para aumentar ou diminuir o buffer, bem como modificar a duração do buffer para rolagem para trás e para frente.
Então, algo como, talvez,
tail -f /var/logs | less
permitiria que você mantivesse um buffer de rolagem dos logs sem pesquisa ( tail
apenas fica ocioso, sem consumir CPU até que o kernel emita um sinal informando que o arquivo foi modificado).
Se você precisar que vários usuários possam ler o mesmo buffer, basta executar tail -f /var/logs
dentro de uma screen
sessão. Minha resposta original não levou em consideração que você deseja executar isso para que vários usuários possam ver os mesmos dados de log ao mesmo tempo. @Let_Me_Be mencionado screen
e então me ocorreu que essa é provavelmente sua melhor aposta.
Então, juntando minha solução e a solução de @Let_Me_Be:
screen -mdS logview -- tail -f /var/logs
Aviso: não testado. Edite se estiver errado. Mas acho que estamos perto de uma solução adequada aqui.
Agora você só precisa estar screen
no modo multiusuário. Isso é um pouco complicado, então vou deixaressesite fala por si. A essência é que você precisa adicionar multiuser on
ao seu ~/.screenrc
arquivo. Veja também oProblemas comunsna parte inferior desse link.
Agora, para os usuários visualizarem o log:
screen -rS logview
deveria fazer isso.
Responder2
Você quer um programa como screen
ou tmux
.