Questão Qualquer maneira de transmitir um arquivo no linux


Eu tenho uma saída de terminal que gostaria de estar 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, pois observe apenas as enquetes, em vez de exibir quando há atualizações, e a cauda não permite a rolagem.


4


origem




Respostas:


Dois problemas que você coloca:

Assista apenas enquetes em vez de produzir quando houver atualizações

tail -f não pesquisa. A partir da versão 7.5 do GNU Coreutils, tail -f vai usar o kernel do Linux inotify interface 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 a 7.5 por algum motivo, ele irá pesquisar uma vez por segundo. Provavelmente também pesquisa em sistemas operacionais POSIX não-Linux (BSD, Solaris, etc), mas você teria que pesquisá-los caso a caso: alguns desses SOs usam GNU Coreutils, mas o kernel não suporta inotify; alguns deles não usam o GNU Coreutils para implementar tail em absoluto.

cauda não permite rolar

o less comando é projetado especificamente para buffer de dados de 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 as opções de linha de comando para aumentar ou diminuir o buffer, bem como modificar o tempo de duração do buffer para voltar e rolar para frente.

Então, algo como, talvez,

tail -f /var/logs | less

permitiria manter um buffer de rolagem dos logs sem pesquisa (tail apenas fica ocioso, sem consumir CPU até que o kernel lance um sinal avisando que o arquivo foi modificado).

Se você precisar de vários usuários para poder ler a partir do mesmo buffer, você pode simplesmente executar tail -f /var/logs dentro de um screen sessão. Minha resposta original não levou em conta que você deseja executar isso para que vários usuários possam ver os mesmos dados de registro ao mesmo tempo. @Let_Me_Be mencionou screen e então ocorreu-me que essa é provavelmente a sua melhor aposta.

Então, colocando minha solução e a solução @ Let_Me_Be juntas:

screen -mdS logview -- tail -f /var/logs

Aviso: não testado. Por favor, edite se está errado. Mas acho que estamos próximos da trilha para uma solução adequada aqui.

Agora você só precisa ter screen no modo multiusuário. Isso é um pouco complicado, então vou deixar esta site fala por si. A essência é que você tem que adicionar multiuser on para o seu ~/.screenrc Arquivo. Veja também o Problemas comuns na parte inferior desse link.

Agora, para os usuários visualizarem o log:

screen -rS logview

deveria fazer isso.


8



Além disso, dê uma olhada esta pergunta, aparentemente, menos tem uma opção para esperar e exibir novos dados (assim como a cauda -f). - terdon


Você quer um programa como screen ou tmux.


2