Como monitorar mudanças em vários arquivos no Linux?

3

Eu quero monitorar as alterações em vários arquivos de log no Linux. Basicamente, quero ver qual arquivo de log é atualizado de um conjunto de 20 arquivos. Verifiquei a ferramenta multitail, mas a interface do usuário pode manipular no máximo cinco arquivos.

Qualquer ajuda é apreciada.

    
por GeekTantra 02.03.2012 / 04:24

5 respostas

3

Para o que você propõe, há várias maneiras de fazer isso, dependendo da situação.

Peso leve: veja em inotify

Mais fixtured (daemon): fam (monitor de alteração de arquivo)

Ou se não for algo comum, você estará fazendo:

Ou para um desativado: watch -d -n 1 ls -t no diretório que você deseja assistir (somente em um diretório simples, não recursivo, mas você poderia modificá-lo para fazer isso) - depois, execute o resultado final.

    
por 02.03.2012 / 04:47
0

Se você estiver disposto a fazer isso a partir da linha de comando, você pode usar um script como este para fazer isso

# When this exits, exit all back ground process also.
trap 'kill $(jobs -p)' EXIT

# iterate through the each given file names,
for file in "$@"
do
# show tails of each in background.
tail -f $file &
done

# wait .. until CTRL+C
wait

Salve este arquivo como multitail.sh ou o que você quiser, então execute como este

./ multitail.sh arquivo.txt arquivo1.txt arquivo2.txt arquivo3.txt arquivo4.txt arquivo5.txt Acabei de rodar isso e ele executou com sucesso 6 arquivos, o lado negativo é que ele apenas informa qual texto foi alterado e não o nome do arquivo de texto / log. Eu usei isso no passado. Para mais informações, etc, dê uma olhada aqui link essa pessoa fez um ótimo writeup espero que isso ajude

    
por 02.03.2012 / 04:46
0

Existem muitas maneiras de esfolar este gato ... apenas por exemplo ...

você pode agregar os registros usando o logstash

se todos estivessem na mesma pasta, você poderia gerar um repositório do git para rastrear as alterações ...

$ touch ~/test
$ git init
$ git add .
$ echo "##this is a comment" >> ~/test
$ git status | grep modified
=># modified:   test

você pode configurar monit para assistir à soma de verificação dos arquivos,

check file /home/myhome/somefile.txt
    if changed checksum then alert

check file /home/myhome/somefile2.txt
    if changed checksum then alert

e talvez isso possa funcionar ...

check directory /home/myhome/
    if changed checksum then alert

ou mais leve use inotify-tools para observar as alterações;

inotifywait -m -r --format '%f' -e modify -e move -e create -e delete ~/test | while read line
do
    echo "hello $line"
done
    
por 02.03.2012 / 05:03
0

Mantenha a simplicidade. tail -f

por exemplo:

tail -f file1 file2 file3 file4 file5
    
por 02.03.2012 / 23:27
0

Se você realmente deseja apenas ver qual arquivo é alterado, basta listá-los com a opção de classificação correta: ls -alt file1 file2 file3

Isso exibirá o arquivo alterado mais recente na parte superior.

Você pode até usar um display dinâmico: watch -n 1 ls -alt file1 file2 file3

    
por 03.03.2012 / 00:50

Tags