Lê logs de um processo durante a execução de algum comando

10

É difícil formular corretamente o título desta pergunta, então vou descrever mais precisamente o meu problema.

Eu tenho algum serviço que produz logs no arquivo logs.log .

Eu tenho outro comando que interage com este serviço. Digamos que seja algum foo.sh .

O que eu preciso é cortar e salvar registros de logs.log exatamente durante a execução de foo.sh . Em outras palavras, eu preciso daquela parte dos logs do serviço quando ele interage com o meu foo.sh (então eu não me importo com os logs do foo.sh ).

Espero que este comando faça o truque, mas continue lendo o arquivo quando foo.sh já tiver terminado:

> foo.sh | tail -f logs.log > foo_part.log

Existe alguma maneira legal de realizar esse truque?

    
por Andremoniy 26.04.2018 / 18:17

2 respostas

12

Isso é bastante simples, enviando seus processos em segundo plano para o fundo:

foo.sh &
mypid=$!
tail -f /path/to/logs.log > /path/to/partial.log &
tailpid=$!
wait $mypid
kill -TERM $tailpid

$! captura o PID do último trabalho enviado para execução em segundo plano, para que possamos wait em seu script terminar e, em seguida, kill o tail processar quando não precisarmos mais dele. / p>     

por 26.04.2018 / 18:20
7

Esta versão pode fazer isso também (eu acho):

( tail -f logs.log >foo_part.log &
foo.sh&
wait $! && kill %1 ) 

Observe que% 1 atingirá o primeiro processo em segundo plano na subshell

    
por 26.04.2018 / 18:26

Tags