Paralela em andamento para cada loop de arquivo?

1

Eu quero monitorar continuamente alguns arquivos de log. O que eu tenho abaixo funciona se eu alternar o tail -F para cat $log_file . Quando uso -tail -F , o primeiro arquivo de log funciona, mas como o processo não termina, ele bloqueia o loop while superior.

Como posso fazer o background de cada processo para que o% outer while read log_file inicie um processo para cada arquivo de log? (também tentei adicionar & em vários lugares para fazer o plano de fundo do loop while interno)

ls /var/log/myApp-*.log | while read log_file ; do
  tail -F $log_file while read log ; do
    echo send $log to external tracker for $log_file if X
  done
done
    
por Philip Kirkbride 05.12.2017 / 13:25

1 resposta

0

Esta solução usa awk para analisar a saída de cauda e chamar um comando com system() se o evento for detectado.

Além disso, você pode evitar a análise da saída de ls e usar globbing.

for log_file in /var/log/myApp-*.log; do 
    tail -F $log_file | awk '{l=gensub(/.+\"level\": ([0-9]+).+/,"\1","g",$0); if(l>50 && l!= $0){system("echo command")}}' &
done
    
por 05.12.2017 / 18:54