Monitorização de múltiplos ficheiros com cauda Unix pode não funcionar como se espera

Monitorização de múltiplos ficheiros com cauda Unix pode não funcionar como se espera

Por 23 de Fevereiro de 2017Engenharia

por Allen Fung, Engenheiro Sênior de Software

"tail -F" é comumente usado para monitorar arquivos para atualizações.

Veja como a cauda pode ser usada para monitorar vários arquivos ao mesmo tempo.

$ cauda -F arquivo1 arquivo2

O problema com o comando acima é que o texto escrito no arquivo1 e no arquivo2 pode não ser lavado para o disco em novos limites de linha. Como resultado, o texto de um arquivo pode ser emendado em texto do outro arquivo na saída da cauda.

Aqui está um exemplo do problema. Suponha que o seguinte é escrito no arquivo1.

linha_1
linha_2
linha_3

Além disso, suponha que o seguinte seja escrito no arquivo2.

LINHA_A
LINHA_B
LINHA_C

Se o texto não for lavado nos limites da nova linha, será possível obter a seguinte saída da cauda.

lineLINE_A
_1
LINHA_B
linha_2
LINHA_C
linha_3

Como você pode ver, "LINE_A" está emendada em "line_1", resultando em "lineLINE_A" na primeira linha. Aqui estão algumas maneiras de resolver o problema acima.

  1. Executar várias caudas em paralelo e canalizar a saída de cada cauda para grep. Você precisará usar a opção em grep para imprimir somente em novos limites de linha.

  2. Escreva uma nova cauda que só imprime quando recebe uma linha completa de um arquivo.

  3. Modifique a aplicação que gerou os ficheiros de registo para criar apenas um único ficheiro de registo. Você precisará certificar-se de que o texto seja enviado para o arquivo único em novos limites de linha.

Aqui está o código a implementar (1) acima.

$ vi multitail.sh
#!/bin/sh

# Quando isto sair, saia também de todo o processo de fundo.
armadilha 'kill $(jobs -p)' EXIT

# iterar através de cada um dos nomes dos ficheiros
para arquivo em "$@".
fazer
  # Ficheiro da cauda em fundo.
  cauda -F $file | grep -line-buffered "" &
feito

# esperar ... até CTRL+C
esperar

Deixo ao leitor a tarefa de implementar (2) e (3).

Obrigado por ler!

Sobre ShareThis

ShareThis has unlocked the power of global digital behavior by synthesizing social share, interest, and intent data since 2007. Impulsionado pelo comportamento do consumidor em mais de três milhões de domínios globais, ShareThis observa acções em tempo real de pessoas reais em destinos digitais reais.

Subscreva a nossa Newsletter

Receba as últimas notícias, dicas e actualizações

Assine

Conteúdo relacionado